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
How to sum a numpy array? 1 # arr is a numpy array. 2 # sum of all values arr.sum() 3 # sum of each row (for 2D array) arr.sum(axis=1) 4 # sum of each column (for 2D array) arr.sum(axis=0) 5 # sum along a specific axis, n arr.sum(axis=n) You can also specify the axis to sum the numpy array along with the axis parameter (see the examples ...
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 Which doesn't copy any data. >>> a = [1,2,3,4] >>> indices = [0, 2] >>> sum (a [i] for i in indices) 4
Array indexing is the same as accessing an array element. You can access an array element by referring to its index number. The indexes in NumPy arrays start with 0, meaning that the first element has index 0, and the second has index 1 etc. Get the second element from the following array.
When we use np.sum with the axis parameter, the function will sum the values along a particular axis. In particular, when we use np.sum with axis = 0, the function will sum over the 0th axis (the rows). It’s basically summing up the values row-wise, and producing a new array (with lower dimensions).
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
You can use sum
directly after indexing with indices
:
a = np.array([1,2,3,4])
indices = [0, 2]
a[indices].sum()
Try:
>>> a = [1,2,3,4]
>>> indices = [0, 2]
>>> sum(a[i] for i in indices)
4
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With