我有两个数组:
a=np.array((1,2,3,4,5))
b=np.array((2,3,4,5,6))
我想要的是使用 a 和 b 的值来限制 linspace,例如
c=np.linspace(a,b,11)
使用此代码时出现错误。答案应该是数组的第一个元素:
c=np.linspace(a,b,11)
print c
c=[1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2]
如果要避免显式 Python 循环,可以执行以下操作:
>>> a = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
>>> b = np.array([2, 3, 4, 5, 6]).reshape(-1, 1)
>>> c = np.linspace(0, 1, 11)
>>> a + (b - a) * c
array([[ 1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. ],
[ 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3. ],
[ 3. , 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4. ],
[ 4. , 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5. ],
[ 5. , 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6. ]])
你可以这样做:
c = np.array([np.linspace(i,j,5) for i,j in zip(a,b)])
#array([[ 1. , 1.25, 1.5 , 1.75, 2. ],
# [ 2. , 2.25, 2.5 , 2.75, 3. ],
# [ 3. , 3.25, 3.5 , 3.75, 4. ],
# [ 4. , 4.25, 4.5 , 4.75, 5. ],
# [ 5. , 5.25, 5.5 , 5.75, 6. ]])
只需使用第一个元素即可:
a = np.array((1, 2, 3, 4, 5))
b = np.array((2, 3, 4, 5, 6))
np.linspace(a[0], b[0], 11)
结果:
array([ 1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. ])
编辑
刚看到评论。OP想要一个二维数组:
np.array([np.linspace(x, y, 11) for x, y in zip(a, b)])
array([[ 1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. ],
[ 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3. ],
[ 3. , 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4. ],
[ 4. , 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5. ],
[ 5. , 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 6. ]])