Double Summation in Python
Solution 1
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.
Solution 2
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)])
Solution 3
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)
Limited Intelligence
Updated on June 11, 2022Comments
-
Limited Intelligence almost 2 years
I am trying to write a code to conduct a double summation (see pic)
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.
-
chepner over 10 yearsThis would compute the mean over all 3 dimensions, where the desire is to generate separate means over M and N for each t. (Unless Y in the code really represents a slice for a specific t.)
-
YXD over 10 yearsUpdated. Adding expected input and output would make it much clearer!
-
Daniel over 10 yearsIn numpy 1.7.1 you can simplify this to
np.mean(a, axis=(0,1))
-
YXD over 10 years@Ophion nice, I didn't know that