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

时间:2016-09-14 07:24:44

标签: python numpy

我有一系列循环设置,每个循环设置创建一个数组数组,子数组包含两个变量名和两个数据数组。

例如:

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和variance,我想为其分配变量名称来自第一个数组cCoh_XX的字符串Var_XXr1_radial_ZZ

我目前要做的代码如下:

            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返回三个数组,第一个我分配给变量cCoh_ens_freq,第二个和第三个数组我想分配变量名存储在第一个和我的第一个数组r1_radial_ZZ中的第二个元素。实际上,当我将处理后的数据分配回第一个数组时,我处理过的数据的变量名被清除了,当我去调用时,例如变量cCoh_AB我得到一个错误说在赋值之前引用了局部变量。

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

更新

以下是我的问题的简化代码示例:

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”。

1 个答案:

答案 0 :(得分: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