我正在尝试编写一个代码来进行双重求和(见图)
其中; 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
这似乎不是最有效的方法,我也不确定它是否给出了正确的结果。
答案 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)])