Double Summation in Python

10,313

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)
Share:
10,313
Limited Intelligence
Author by

Limited Intelligence

Updated on June 11, 2022

Comments

  • Limited Intelligence
    Limited Intelligence almost 2 years

    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.

  • chepner
    chepner over 10 years
    This 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
    YXD over 10 years
    Updated. Adding expected input and output would make it much clearer!
  • Daniel
    Daniel over 10 years
    In numpy 1.7.1 you can simplify this to np.mean(a, axis=(0,1))
  • YXD
    YXD over 10 years
    @Ophion nice, I didn't know that