2013-11-15 8 views
5

Próbuję wykonać linear combination w Numpy, aby uzyskać przesunięcie wektora między dwoma punktami, ale sposób w jaki robię jest dość odrażający.Przechodzenie linii 2D w Numpy?

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 

Wyjście jest

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

Czy istnieje lepszy sposób to zrobić (oczywiście skutecznie)?

Odpowiedz

5

Jeśli dodasz rozmiar jeden wymiar do końca swojej tablicy t, transmisja zadba o szczegóły:

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

Dziękuję bardzo. Przez rozmiar jeden wymiar masz na myśli "Brak", który dodałeś? – Cupitor

+1

Tak, 'a [:, Brak]' jest takie samo jak 'a.reshape (a.shape [: 1] + (1,) + a.shape [1:])'. Więc lepiej jest zrobić 'a [..., None]', który jest taki sam jak 'a.reshape (a.shape + (1,))', zredaguje odpowiedź. – Jaime

Powiązane problemy