2017-02-16 4 views
1

ich eine Matrix M wie dieses:Erste erste n Nicht-Null-Elemente eines numpy Matrix

>>> M 
array([[1, 0, 3, 4], 
     [0, 3, 4, 5], 
     [5, 4, 0, 7]]) 

Was ich tun möchte, ist die erste N zu extrahieren ist (sagen wir N = 2) nicht Null Elemente jeder Reihe in M ​​und setze sie in eine neue Matrix M2 der gleichen Form, während die übereinstimmenden Werte in M ​​auf Null gesetzt werden. So soll die Ausgabe sein:

>>> M 
array([[0, 0, 0, 4], 
     [0, 0, 0, 5], 
     [0, 0, 0, 7]]) 

>>> M2 
array([[1, 0, 3, 0], 
     [0, 3, 4, 0], 
     [5, 4, 0, 0]]) 
+0

Ziemlich schlechte Praxis auf Löschen Ihre [ 'letzten question'] (http:/(stackoverflow.com/questions/42402589), besonders angesichts der Zeit, die jemand gegeben hat, um sich um die Beseitigung der Mängel in dem Problem zu kümmern und es dann tatsächlich zu lösen. Die Leute würden weniger Motivation finden, Ihre Fragen zu beantworten, da das Löschen von Fragen ein Problem darstellt. – Divakar

Antwort

3

Einen Ansatz mit cumsum -

M2 = M*((M!=0).cumsum(1)<=2) 
M_new = M - M2 

Probelauf -

In [42]: M 
Out[42]: 
array([[1, 0, 3, 4], 
     [0, 3, 4, 5], 
     [5, 4, 0, 7]]) 

In [43]: M2 = M*((M!=0).cumsum(1)<=2) 
    ...: M_new = M - M2 
    ...: 

In [44]: M_new 
Out[44]: 
array([[0, 0, 0, 4], 
     [0, 0, 0, 5], 
     [0, 0, 0, 7]]) 

In [45]: M2 
Out[45]: 
array([[1, 0, 3, 0], 
     [0, 3, 4, 0], 
     [5, 4, 0, 0]]) 
+1

Ich mochte deine Argumentation sehr! Gut gemacht ! – MMF