(num)pythonic方法制作用于线条绘制的3d网格

时间:2013-07-01 00:41:14

标签: python numpy

我想在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向导如何做这样的事情?

2 个答案:

答案 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