10

How to perform a sum just for a list of indices over numpy array, e.g., if I have an array a = [1,2,3,4] and a list of indices to sum, indices = [0, 2] and I want a fast operation to give me the answer 4 because the value for summing value at index 0 and index 2 in a is 4

1
  • 1
    a[indices].sum() Commented Dec 9, 2017 at 23:45

3 Answers 3

22

You can use sum directly after indexing with indices:

a = np.array([1,2,3,4])
indices = [0, 2] 
a[indices].sum()
Sign up to request clarification or add additional context in comments.

Comments

15

The accepted a[indices].sum() approach copies data and creates a new array, which might cause problem if the array is large. np.sum actually has an argument to mask out colums, you can just do

np.sum(a, where=[True, False, True, False])

Which doesn't copy any data.

The mask array can be obtained by:

mask = np.full(4, False)
mask[np.array([0,2])] = True

1 Comment

Since the question asks for a fast operation, this is the better answer IMO.
3

Try:

>>> a = [1,2,3,4]
>>> indices = [0, 2]
>>> sum(a[i] for i in indices)
4

Faster

If you have a lot of numbers and you want high speed, then you need to use numpy:

>>> import numpy as np
>>> a = np.array([1,2,3,4])
>>> a[indices]
array([1, 3])
>>> np.sum(a[indices])
4

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.