I am trying to write a code to conduct a double summation (see pic)

enter image description here

in which; M is the subjects, N is the Trials, Yijt is the measured wave form data (3d array)

so far I have; Given Y is the data arranged as Y[subjects, trials, time]

# 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

this doesnt seem the most effective way to do this, nor am i certain it is giving the correct result.

有帮助吗?

解决方案

If you're using numpy just do

np.mean(Y)

Also, it's good to add sample input and expected output data to your question.

If you want means for each t you can do np.mean(np.mean(a, axis=0), axis=0) , or as noted by @ophion you can shorten this to np.mean(a, axis=(0, 1)) in newer (1.71 and on) versions of NumPy.

其他提示

To add a more general answer to your question:

You can code a double summation with the help of python list comprehension.

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

When it comes to simple double summations like in your case, it's nice to use numpy's einsum:

np.einsum('tij -> t', Y) / (M*N)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top