2013-06-21 46 views
1

我有一个2D numpy数组和一列索引列表,我希望计算numpy数组中相应的一维向量的总和。这可以通过for循环或通过列表理解来轻松完成,但我想知道是否可以对其进行矢量化。使用类似的代码,我可以从矢量化中获得大约40倍的加速比。向量化各种索引的numpy数组调用

这里的示例代码:

import numpy as np 
indices = [[1,2],[1,3],[2,0,3],[1]] 
array_2d = np.array([[0.5, 1.5],[1.5,2.5],[2.5,3.5],[3.5,4.5]]) 
soln = [np.sum(array_2d[x], axis=-1) for x in indices] 

(编辑):请注意,指数不(X,Y)坐标array_2d,代替指数为[0] = [1,2]表示在第一和第二array_2d中的向量(行)。索引中每个列表的元素数目可以变化。

这就是我希望能够做到:

vectorized_soln = np.sum(array_2d[indices[:]], axis=-1) 

有谁知道是否有实现这一目标的任何方式?

+0

“indices”的最后一个元素应该是“[2]”吗?其他元素的长度为2. –

+0

我编辑了这篇文章,并解释了一些索引代表的内容。最初是的,索引中的元素可以具有可变大小,但是对array_2d中的相应向量执行的操作应该同样适用(如总和或平均值等),并输出单个向量。 – irozada

回答

1

首先给所有,我觉得你在指数的第三个元素一个错字...

最简单的方式做到这一点是建立一个与sub_array指数的两个数组:

i = np.array([1,1,2]) 
j = np.array([2,3,?]) 
sub_arr2d = array_2d[i,j] 

最后,你可以得到sub_arr2d的总和......

+0

这不是一个错字,我编辑了一些帖子,以更好地解释指数意味着什么。我认为你的建议不会与我的想法一致(希望现在写得更好)。 – irozada