【发布时间】:2018-12-11 19:00:52
【问题描述】:
Numpy 有 repeat 函数,它将数组中的每个元素重复给定的(每个元素)次数。
我想实现一个功能,它做类似的事情,但不是重复单个元素,而是可变大小的连续元素块。本质上我想要以下功能:
import numpy as np
def repeat_blocks(a, sizes, repeats):
b = []
start = 0
for i, size in enumerate(sizes):
end = start + size
b.extend([a[start:end]] * repeats[i])
start = end
return np.concatenate(b)
例如,给定
a = np.arange(20)
sizes = np.array([3, 5, 2, 6, 4])
repeats = np.array([2, 3, 2, 1, 3])
然后
repeat_blocks(a, sizes, repeats)
返回
array([ 0, 1, 2,
0, 1, 2,
3, 4, 5, 6, 7,
3, 4, 5, 6, 7,
3, 4, 5, 6, 7,
8, 9,
8, 9,
10, 11, 12, 13, 14, 15,
16, 17, 18, 19,
16, 17, 18, 19,
16, 17, 18, 19 ])
我想以性能的名义将这些循环推入 numpy。这可能吗?如果有,怎么做?
【问题讨论】:
标签: python algorithm numpy vectorization