Python 特定索引的 numpy 数组求和

Python numpy array sum over certain indices

如何仅对 numpy 数组的索引列表执行求和,例如,如果我有一个数组 a = [1,2,3,4] 和一个要求和的索引列表,indices = [0, 2] 并且我想要一个快速的给我答案 4 的操作,因为 a 中索引 0 和索引 2 处的求和值的值为 4

尝试:

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

更快

如果你的数字很多,又想要高速,那你就需要用到numpy:

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

indices索引后可以直接使用sum:

a = np.array([1,2,3,4])
indices = [0, 2] 
a[indices].sum()

公认的a[indices].sum()方法复制数据并创建一个新数组,如果数组很大,这可能会导致问题。 np.sum 实际上有一个屏蔽列的参数,你可以这样做

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

不复制任何数据。

mask数组可以通过以下方式获取:

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