Python - 在 for 循环中屏蔽?
Python - masking in a for loop?
我有三个数组,r_vals、Tgas_vals 和 n_vals。它们都是形状为 (9998.) 的 numpy 数组。数组具有重复值,我想遍历 r_vals 的唯一值并找到 Tgas_vals 和 n_vals 的对应值,这样我就可以使用最后两个数组来计算加权平均。这就是我现在拥有的:
def calc_weighted_average (r_vals,Tgas_vals,n_vals):
for r in r_vals:
mask = r == r_vals
count = 0
count += 1
for t in Tgas_vals[mask]:
print (count, np.average(Tgas_vals[mask]*n_vals[mask]))
weighted_average = calc_weighted_average (r_vals,Tgas_vals,n_vals)
我 运行 遇到的问题是函数只循环一次。我是否错误地实现了 mask,或者问题出在 for 循环的其他地方?
我不确定你打算用所有平均值做什么,所以我会把它扔在那里,看看它是否有帮助。以下代码将计算一堆加权平均值,每个 r_vals 的唯一值一个,并将它们存储在字典中(然后打印出来)。
def calc_weighted_average (r_vals, z_vals, Tgas_vals, n_vals):
weighted_vals = {} #new variable to store rval=>weighted ave.
for r in np.unique(r_vals):
mask = r_vals == r # I think yours was backwards
weighted_vals[r] = np.average(Tgas_vals[mask]*n_vals[mask])
return weighted_vals
weighted_averages = calc_weighted_average (r_vals, z_vals, Tgas_vals, n_vals)
for rval in weighted_averages:
print ('%i : %0.4f' % (rval, weighted_averages[rval])) #assuming rval is integer
或者,您可能想以某种方式考虑 "z_vals"。你的问题在这方面不清楚。
我有三个数组,r_vals、Tgas_vals 和 n_vals。它们都是形状为 (9998.) 的 numpy 数组。数组具有重复值,我想遍历 r_vals 的唯一值并找到 Tgas_vals 和 n_vals 的对应值,这样我就可以使用最后两个数组来计算加权平均。这就是我现在拥有的:
def calc_weighted_average (r_vals,Tgas_vals,n_vals):
for r in r_vals:
mask = r == r_vals
count = 0
count += 1
for t in Tgas_vals[mask]:
print (count, np.average(Tgas_vals[mask]*n_vals[mask]))
weighted_average = calc_weighted_average (r_vals,Tgas_vals,n_vals)
我 运行 遇到的问题是函数只循环一次。我是否错误地实现了 mask,或者问题出在 for 循环的其他地方?
我不确定你打算用所有平均值做什么,所以我会把它扔在那里,看看它是否有帮助。以下代码将计算一堆加权平均值,每个 r_vals 的唯一值一个,并将它们存储在字典中(然后打印出来)。
def calc_weighted_average (r_vals, z_vals, Tgas_vals, n_vals):
weighted_vals = {} #new variable to store rval=>weighted ave.
for r in np.unique(r_vals):
mask = r_vals == r # I think yours was backwards
weighted_vals[r] = np.average(Tgas_vals[mask]*n_vals[mask])
return weighted_vals
weighted_averages = calc_weighted_average (r_vals, z_vals, Tgas_vals, n_vals)
for rval in weighted_averages:
print ('%i : %0.4f' % (rval, weighted_averages[rval])) #assuming rval is integer
或者,您可能想以某种方式考虑 "z_vals"。你的问题在这方面不清楚。