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"。你的问题在这方面不清楚。