Python中的双重求和

时间:2013-10-09 14:26:33

标签: python math numpy equations

我正在尝试编写一个代码来进行双重求和(见图)

enter image description here

其中; M是科目, N是试验, Yijt是测量的波形数据(3d数组)

到目前为止,我有; 给定Y是按Y [主题,试验,时间]排列的数据

# ranges:
I = len(Y)
J = len(Y[0])

Y_i_vals = 0

for i in range(M):
    for j in range(N):
        Y_i_vals = Y_i_vals +Y[i][j]
Yt = (1.0/(M*N)) * Y_i_vals

这似乎不是最有效的方法,我也不确定它是否给出了正确的结果。

3 个答案:

答案 0 :(得分:6)

如果您正在使用numpy,请执行

np.mean(Y)

此外,将样本输入和预期输出数据添加到您的问题中也很不错。

如果你想为每个t提供方法,你可以np.mean(np.mean(a, axis=0), axis=0) ,或者如@ophion所述,你可以在新的(1.71及以上)版本的NumPy中将其缩短为np.mean(a, axis=(0, 1))

答案 1 :(得分:1)

在像您这样的情况下进行简单的双重求和时,最好使用numpy的einsum:

np.einsum('tij -> t', Y) / (M*N)

答案 2 :(得分:0)

为您的问题添加更一般的答案:

您可以在python list comprehension的帮助下对双重求和进行编码。

Yt = (1.0/(M*N)) * sum([Y[i][j] for i in range(M) for j in range(N)])