2017-02-01 1 views
0

Supposons que j'ai un vecteur:sélectionner des lignes à partir de 2 matrices en utilisant un vecteur d'indicateur dans numpy

f = np.array([1,1,0,0]) #(4,) 

et 2 matrices:

m1 = np.array([[1,2],[3,4],[5,6],[7,8]]) #(4,2) 
m2 = np.array([[10,20],[30,40],[50,60],[70,80]]) #(4,2) 

Comment créer une nouvelle matrice m3 qui sélectionne les lignes de m1 où f == 1 et m2 sinon?

Je veux m3 être:

>>> m3 
array([[ 1, 2], 
     [ 3, 4], 
     [50, 60], 
     [70, 80]]) 

Comment puis-je y parvenir? Je préférerais une solution que je peux utiliser aussi.

+0

'np.vstack ((m1 [np.where (f == 1)], m2 [np.where (f = 1)])) '? Je ne suis pas familier avec 'theano'. – Abdou

Répondre

2

Je ne sais pas Théano mais pour numpy:

np.where(f[:, None], m1, m2) 
+1

ou 'où (f, m1.T, m2.T) .T' –

+0

@ B.M. intéressant. Je m'attendais à ce que votre ligne renvoie un tableau non-C-contigu, mais ce n'est pas le cas. Cela semble exactement équivalent au mien. –