数组范围与numpy

时间:2011-03-13 00:12:37

标签: python optimization numpy

我有以下数组:

>>> x = numpy.array([2,4,2,3,1])
>>> x
array([2, 4, 2, 3, 1])

我想要一系列这些值的范围。我可以像这样创建它:

>>> numpy.hstack( (numpy.arange(v) for v in x) )
array([0, 1, 0, 1, 2, 3, 0, 1, 0, 1, 2, 0])

给定x,是否有更快的方法来生成numpy而不必使用for循环?

2 个答案:

答案 0 :(得分:1)

我明白了:

>>> x
array([2, 4, 2, 3, 1])
>>> ends = numpy.cumsum(x)
>>> ranges = numpy.arange(ends[-1])
>>> ranges = ranges - numpy.repeat(ends-x, x)
>>> ranges
array([0, 1, 0, 1, 2, 3, 0, 1, 0, 1, 2, 0])
>>> 

答案 1 :(得分:0)

这实际上更快吗? 我有类似的需求,

concatenate([range(l, r) for l, r in array((left, right)).T])

的速度是

的两倍

range(end[-1]) + repeat(left + end, right-left)

end = cumsum(right - left)和你的一样)。

(在我非常短暂的经历中,重复非常缓慢 - 至少在python 3.6中)