我有一个数值数组(一些浮点数)
a = np.array([0.2,0.3,0.1,0.22,0.15])
此处长度为m=5
。
我有一个长度为m
的索引列表,其元素位于0,1,...,n-1
中,其中n
通常与m
不同。例如,让n=4
:
b = np.array([0,3,0,2,2])
我想构造一个长度为c
的列表n
,其元素i=0,1,...,n-1
是a_j
的元素j=0,1,...,m-1
的总和,其中{{1} }。在此示例中,b_j == i
的元素是:
c
这是我知道该怎么做的一种方式:
c[0] = 0.2 + 0.1
c[1] = 0.0
c[2] = 0.22 + 0.15
c[3] = 0.3
numpy中是否有一种方法可以不使用for循环(以提高效率)?
我发现了以下内容:
[ np.sum(a[b == i]) for i in range(0,n) ]
给予
idxs = range(0,n)
true_false = np.equal.outer(b, idxs).T
true_false
大小为array([[ True, False, True, False, False],
[False, False, False, False, False],
[False, False, False, True, True],
[False, True, False, False, False]])
。
我可以按如下方式平铺矢量m x n = 5 x 4
以匹配尺寸:
a
给予:
a_tiled = np.tile(a,(n,1))
a_tiled
但是然后:
array([[0.2 , 0.3 , 0.1 , 0.22, 0.15],
[0.2 , 0.3 , 0.1 , 0.22, 0.15],
[0.2 , 0.3 , 0.1 , 0.22, 0.15],
[0.2 , 0.3 , 0.1 , 0.22, 0.15]])
给予:
a_tiled[true_false]
这不是我期望的。
谢谢