3

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

4

2 回答 2

3

你可以通过一点广播来取消这个循环的所有 Python 循环:

origin + delta*np.linspace(0, 1, npts)[:, np.newaxis]
于 2013-07-01T03:24:05.597 回答
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
于 2013-07-01T00:52:19.983 回答