使用numpy基于Python中的索引列表的总和列表

时间:2019-06-18 20:43:20

标签: python numpy

我有一个数值数组(一些浮点数)

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-1a_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]

这不是我期望的。

谢谢

0 个答案:

没有答案