当前位置: 代码迷 >> python >> 获得numpy矩阵的前n个非零元素
  详细解决方案

获得numpy矩阵的前n个非零元素

热度:87   发布时间:2023-06-16 14:14:05.0

我有一个这样的矩阵M:

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

我想要做的是提取是M中每行的第一个N(比如说N = 2)非零元素,并将它们放入相同形状的新矩阵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]])

一种方法 -

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