【发布时间】:2016-04-04 04:01:50
【问题描述】:
给定一个数组'array'和一组索引'indices',我如何找到通过以矢量化方式沿这些索引拆分数组而形成的子数组的累积和? 为了澄清,假设我有:
>>> array = np.arange(20)
>>> array
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
indices = np.arrray([3, 8, 14])
操作应该输出:
array([0, 1, 3, 3, 7, 12, 18, 25, 8, 17, 27, 38, 50, 63, 14, 29, 45, 62, 80, 99])
请注意,数组非常大(100000 个元素),所以我需要一个矢量化的答案。使用任何循环都会大大减慢它的速度。 另外,如果我有同样的问题,但是一个二维数组和对应的索引,我需要对数组中的每一行做同样的事情,我该怎么做?
对于 2D 版本:
>>>array = np.arange(12).reshape((3,4))
>>>array
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> indices = np.array([[2], [1, 3], [1, 2]])
输出将是:
array([[ 0, 1, 3, 3],
[ 4, 9, 6, 13],
[ 8, 17, 10, 11]])
澄清一下:每一行都会被拆分。
【问题讨论】:
标签: python arrays performance numpy vectorization