我想在3d空间中的两个点之间创建一条线:
origin = np.array((0,0,0),'d')
final = np.array((1,2,3),'d')
delta = final-origin
npts = 25
points np.array([origin + i*delta for i in linspace(0,1,npts)])
但这很愚蠢:我建立了一个大的python列表,然后将它传递给numpy,当我确定有一种方法可以单独使用numpy。 numpy向导如何做这样的事情?
答案 0 :(得分:3)
你可以通过一点广播取消所有Python循环:
origin + delta*np.linspace(0, 1, npts)[:, np.newaxis]
答案 1 :(得分:1)
也许使用np.column_stack:
In [71]: %timeit np.column_stack((np.linspace(o,f,npts) for o,f in zip(origin,final)))
10000 loops, best of 3: 45 us per loop
In [77]: %timeit np.array([origin + i*delta for i in np.linspace(0,1,npts)])
10000 loops, best of 3: 138 us per loop
注意:Jaime的答案更快:
In [92]: %timeit origin + (final-origin)*np.linspace(0, 1, npts)[:, np.newaxis]
10000 loops, best of 3: 21.1 us per loop