我有一系列循环设置,每个循环设置创建一个数组数组,子数组包含两个变量名和两个数据数组。
例如:
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_XX
和r1_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_AB
和Var_AB
并让它们分别返回值“2”和“4”。
答案 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