如果
a由整数<2 ** 31-1组成(也就是说,如果
a其值可以适合dtype
int32),则可以使用
np.bincount权重:
import numpy as npa = [7,3,5,7,5,7]b = [0.2,0.1,0.3,0.1,0.1,0.2]x=np.bincount(a,weights=b)print(x)# [ 0. 0. 0. 0.1 0. 0.4 0. 0.5]print(x[[7,3,5]])# [ 0.5 0.1 0.4]
np.unique(a)返回
[3 5 7],因此结果以不同的顺序出现:
print(x[np.unique(a)])# [ 0.1 0.4 0.5]
使用的一个潜在问题
np.bincount是它返回一个数组,该数组的长度等于in中的最大值
a。如果
a甚至包含一个值接近2 **
31-1的元素,则
bincount必须分配一个大小为
8*(2**31-1)字节的数组(或16GiB)。
所以,
np.bincount可能是阵列中的最快的解决方案
a具有很大的长度,但不是大值。对于
a长度较小(且值较大或较小)的数组,使用a
collections.defaultdict可能会更快。
编辑:请参见JF Sebastian的解决方案,以解决仅整数值限制和大值问题。



