5

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

在此处输入图像描述

其中;M 是主题,N 是 Trials,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

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

4

3 回答 3

9

如果你使用numpy只是做

np.mean(Y)

此外,最好将示例输入和预期输出数据添加到您的问题中。

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

于 2013-10-09T14:33:43.377 回答
1

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

您可以在 python 列表理解的帮助下编写双重求和。

Yt = (1.0/(M*N)) * sum([Y[i][j] for i in range(M) for j in range(N)])
于 2017-10-10T18:23:35.743 回答
1

当涉及到像您的情况这样的简单双重求和时,最好使用 numpy 的 einsum:

np.einsum('tij -> t', Y) / (M*N)
于 2019-12-11T11:49:49.780 回答