a = np.array(5)
result = np.array([a-2, a-1, a, a+1, a+2])
print result
array([3, 4, 5, 6, 7])
正确!
但是,如果没有手动编写+- 2 a-2, a-1, a, a+1, a+2
编辑:第二个问题:
a = np.array([5,16,27])
res = np.concatenate([a-2, a-1, a, a+1, a+2])
print res
array([ 3, 14, 25, 4, 15, 26, 5, 16, 27, 6, 17, 28, 7, 18, 29])
确定
但如何在不写+-
?
答案 0 :(得分:1)
你有没有考虑过这种方法?
result = [a+i for i in range(-2,3)]
对于第二个问题,只需使用一个循环(使用我的方法)
a, result = np.array([5,6,7]), []
for k in a: result.append([k+i for i in range(-2,3)])
或
results = [k+i for k in a for i in range(-2,3)]
答案 1 :(得分:1)
也许arange?
np.transpose([np.arange(n-2, n+3) for n in a]).flatten()
#=> array([ 3, 14, 25, 4, 15, 26, 5, 16, 27, 6, 17, 28, 7, 18, 29])
请注意,我必须使用+ 3作为上限,因为参数指定了半开区间。
更新更新问题的一种可能解决方案:
def ranges(a, x):
return np.transpose([np.arange(n-x, n+x+1) for n in a]).flatten()
作为一项功能:
{{1}}
答案 2 :(得分:1)
由于您使用numpy
,请利用其矢量化。
您还可以将逻辑包装在函数中以使其适应性。
问题1
a = np.array(5)
def ranger(a, n):
return np.arange(a-n, a+n+1)
ranger(a, 2) # array([3, 4, 5, 6, 7])
问题2
a = np.array([5, 16, 27])
def ranger(a, n):
return np.hstack([a+i for i in range(-n, n+1)])
ranger(a, 2) # array([ 3, 14, 25, 4, 15, 26, 5, 16, 27, 6, 17, 28, 7, 18, 29])
答案 3 :(得分:0)
怎么样:
>>> import numpy as np
>>> np.add.outer(np.r_[-2:3], [5,16,27]).ravel()
array([ 3, 14, 25, 4, 15, 26, 5, 16, 27, 6, 17, 28, 7, 18, 29])