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
如何仅对 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