5

我有两个数组:

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]
4

3 回答 3

12

如果要避免显式 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. ]])
于 2013-06-02T21:18:43.440 回答
8

你可以这样做:

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.  ]])
于 2013-06-02T21:03:05.523 回答
0

只需使用第一个元素即可:

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. ]])
于 2013-06-02T21:01:33.887 回答