具有特定差距的numpy arange

时间:2018-01-24 16:32:57

标签: python arrays python-3.x numpy

python3.x中有更清洁,更好的方法吗

a = np.arange(1,4)
b = np.arange(5,10)
c = np.concatenate((a,b))

?结果是c = [1,2,3,5,6,7,8,9,10] 请注意,此示例中所选的数字是任意的!

4 个答案:

答案 0 :(得分:3)

使用numpy.r_对象。

c = np.r_[1:4, 5:10]

我觉得这可能是在

之前提出来的

答案 1 :(得分:1)

不是真的。使用一点信息理论......

这里有两个独立的想法:序列和排除。当然,你可以编制一个以相等的间隔展示这些值的多项式,但这并不简单。

这很容易减少到两个解决方案之一:连接各个连续序列(您的发布),或构建整个范围,但在使用前删除排除。你可以用较短的符号来表达,但在所有方面都没有任何本质上“更好”的东西。

答案 2 :(得分:1)

np.delete似乎比np.r_快一点:

>>> from timeit import repeat
>>> import numpy as np
>>> 
>>> min(repeat('np.r_[1:4, 5:10]', globals=globals(), number=100000))
1.2129063629545271
>>> min(repeat('np.delete(np.arange(1, 10), 4)', globals=globals(), number=100000))
0.6783314400818199

......但不如OP的串联快

>>> min(repeat('np.concatenate((np.arange(1, 4), np.arange(5, 10)))', globals=globals(), number=100000))
0.1798924310132861

答案 3 :(得分:1)

根据您的具体用例,这样做也可以解决您的问题:

np.array([ x + (x>3) for x in range(1,9) ])

或纯粹的numpy:

a = np.arange(1, 9)
a += (a>3)  # or similar

但我只是为了完整性而提到这一点。我很难想到这将是一个很好的解决方案。当然不是在一些奇怪而艰难的优化步骤之前。

但请记住,这种方法更为通用,也可以用于比(a>3)更复杂的计算。