【发布时间】:2013-06-21 23:42:47
【问题描述】:
我有一个 2D numpy 数组和一个索引列表列表,我希望从 numpy 数组中计算相应的 1D 向量的总和。这可以通过 for 循环或列表理解轻松完成,但我想知道是否可以对其进行矢量化。使用类似的代码,我从矢量化中获得了大约 40 倍的加速。
这里是示例代码:
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]
(编辑):请注意,对于 array_2d,索引不是 (x,y) 坐标,而是 indices[0] = [1,2] 表示 array_2d 中的第一个和第二个向量(行)。索引中每个列表的元素数量是可变的。
这是我希望能够做到的:
vectorized_soln = np.sum(array_2d[indices[:]], axis=-1)
有人知道是否有任何方法可以实现这一目标吗?
【问题讨论】:
-
indices的最后一个元素应该是[2]吗?其他元素的长度为 2。 -
我编辑了这篇文章并解释了更多索引代表什么。最初是的,索引中的元素可以具有可变大小,但对 array_2d 中相应向量执行的操作应该同样有效(例如总和或平均值),并输出单个向量。
标签: python numpy vectorization