Python numpy array sum over certain indices
Asked Answered
G

3

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

Gaffe answered 9/12, 2017 at 23:39 Comment(1)
a[indices].sum()Allanadale
R
22

You can use sum directly after indexing with indices:

a = np.array([1,2,3,4])
indices = [0, 2] 
a[indices].sum()
Rocca answered 9/12, 2017 at 23:45 Comment(0)
C
13

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
Clerihew answered 8/11, 2019 at 1:29 Comment(1)
Since the question asks for a fast operation, this is the better answer IMO.Tunnell
D
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
Dyche answered 9/12, 2017 at 23:44 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.