2013-11-15 73 views
5

我想在Numpy中做linear combination來得到兩點之間的矢量遍歷,但我做的方式非常可怕。在Numpy中遍歷2D線?

import numpy as np 
a=np.array([1,2]) 
b=np.array([3,4]) 
t=np.linspace(0,1,4) 
c=(np.asarray([t*a[0],t*a[1]])+np.asarray([(1-t)*b[0],(1-t)*b[1]])).T 
print c 

輸出是

[[ 3.   4.  ] 
[ 2.33333333 3.33333333] 
[ 1.66666667 2.66666667] 
[ 1.   2.  ]] 

有沒有更好的辦法做到這一點(當然有效)?

回答

5

如果添加了一個大小爲一層面,你的t數組的末尾,廣播將採取的細節問題:

>>> a=np.array([1,2]) 
>>> b=np.array([3,4]) 
>>> t=np.linspace(0,1,4) 
>>> t[..., None] * a + (1 - t[..., None]) * b 
array([[ 3.  , 4.  ], 
     [ 2.33333333, 3.33333333], 
     [ 1.66666667, 2.66666667], 
     [ 1.  , 2.  ]]) 
+0

非常感謝你。按照一維的大小,你的意思是你添加的「無」? – Cupitor

+1

是的,'a [:,無]'與a.reshape(a.shape [:1] +(1,)+ a.shape [1:])相同。所以你最好做'a [...,None]',它和'a.shahape(a.shape +(1,))'一樣,會編輯答案。 – Jaime