如何将数据数组分配给名称存储在另一个数组中的变量?

问题描述:

我有一系列的循环设置,每个循环创建一个数组数组,其中每个子数组包含两个变量名和两个数据数组。如何将数据数组分配给名称存储在另一个数组中的变量?

例如:

r1_radial_ZZ = np.array([ ["cCoh_AB", "Var_AB", trA_z.data, trB_z.data], 
           ["cCoh_AC", "Var_AC", trA_z.data, trC_z.data], 
           ["cCoh_AD", "Var_AD", trA_z.data, trD_z.data], 
           ["cCoh_AE", "Var_AE", trA_z.data, trE_z.data], 
           ["cCoh_AF", "Var_AF", trA_z.data, trF_z.data], 
           ["cCoh_AG", "Var_AG", trA_z.data, trG_z.data] ], dtype=object) 

数据阵列trX_z.data包含在所述第一阵列r1_radial_ZZ在随后与它返回两个数据阵列中,coherencey和方差,为此,我想将变量分配另一个函数来处理名称使用来自第一个阵列r1_radial_ZZ的字符串cCoh_XXVar_XX

我现在有这样做的代码如下:

  for i in range(r1_radial_ZZ.shape[0]): 
       cCoh_ens_freq, r1_radial_ZZ[i,0], r1_radial_ZZ[i,1] = scpw.coherency_ensemble(r1_radial_ZZ[i,2], r1_radial_ZZ[i,3]) 

scpw.coherency_ensemble返回一些三个阵列的功能,其中所述第一I分配给变量cCoh_ens_freq,并且所述第二和第三阵列我想要使用存储在我的第一个数组r1_radial_ZZ中的第一个和第二个元素中的变量名进行赋值。实际上,当我将处理过的数据分配回第一个数组时,我处理的数据的变量名将被清除,而当我去调用变量cCoh_AB时,出现一个错误,指出局部变量在分配之前被引用。

如何重新安排我的代码,以便在代码运行后,包含变量名称作为字符串的第一个数组中的元素最终成为具有给定变量名称的数据数组?

UPDATE

这里是我的问题简化代码示例:

import numpy as np 

def calculation(x, y): 
    x2 = 2*x 
    y2 = 2*y 

    return "double", x2, y2 

def dict_example(): 
    first_array = np.array([["cCoh_AB", "Var_AB", 1, 2]], dtype=object) 

    for i in range(first_array.shape[0]): 
     type, first_array[i, 0], first_array[i, 1] = calculation(first_array[i, 2], first_array[i, 3]) 

dict_example() 

从本质上讲,我希望能够调用的变量cCoh_ABVar_AB,并让他们返回值“2 “和”4“。

+2

[Python的字符串转换为变量名]的可能的复制(http://stackoverflow.com/questions/26158881/python-convert-string-to-variable-name) – spectras

+0

我已经简化并重新编写代码,以便我可以由查看我的问题的人来运行。我想我的问题更多的是我想存储一个变量名与相关联的数据(字典键和值)以及标准数据数组,作为numpy数组中的不同元素。这是否可能与numpy或我必须纯粹恢复使用字典?最终,我想避免创建比我的代码中已有的更多的数据结构。 – Nukolas

+0

为什么不按照上面的建议将结果吐出到字典中的关键字? –

答案是使用的变量名中first_array在一个空的字典,而我能够分配由calculation()功能生成的数据来产生键:

def calculation(x, y): 

    x2 = 2*x 
    y2 = 2*y 

    return "double", x2, y2 

def dict_example(): 

    cCoh_dict = {} 

    first_array = np.array([["cCoh_AB", "Var_AB", 1, 2]], dtype=object) 

    for i in range(first_array.shape[0]): 
     type, cCoh_dict[first_array[i, 0]], cCoh_dict[first_array[i, 1]] = calculation(first_array[i, 2], first_array[i, 3]) 

然后,与所分配的密钥值在first_array变量名是如期望的那样

print first_array[0,0] 
>>> cCoh_AB 

print cCoh_dict["cCoh_AB"] 
>>> 2 

print cCoh_dict["Var_AB"] 
>>> 4