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]
请注意,此示例中所选的数字是任意的!
答案 0 :(得分:3)
答案 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)
更复杂的计算。