2017-02-16 88 views
1

我有一個矩陣M這樣的:一個numpy的矩陣中獲取第一N個非零元素

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

我想要做的是提取是第N(假設N = 2)非M中每行的零元素並將它們放入一個相同形狀的新矩陣M2中,同時將M中的匹配值設置爲零。所以輸出應該是:

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

刪除自己的['最近question']非常糟糕的做法(HTTP:/ /stackoverflow.com/questions/42402589),特別是考慮到某人給予清理問題的缺陷然後真正解決問題的時間。考慮到刪除問題的行爲,人們會發現解決問題的動機較小。 – Divakar

回答

3

一種方法與cumsum -

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

採樣運行 -

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

我真的很喜歡你的推理!做得好 ! – MMF

相關問題