import numpy as np
def calc_size(matrix, index):
return np.nonzero(matrix[index,:])[1].size
def swap_rows(matrix, frm, to):
matrix[[frm, to],:] = matrix[[to, frm],:]
Numpy - Python 2.7
如何实现矩阵的行在非零条目的大小之后排序?我已经编写了这两种方法来完成这项工作,但我需要将其交给排序引擎?最满的行应该在开头!
最佳答案
如果你有一个数组arr
:
array([[0, 0, 0, 0, 0],
[1, 0, 1, 1, 1],
[0, 1, 0, 1, 1],
[1, 1, 1, 1, 1]])
您可以根据零条目的数量对数组的行进行排序,方法是:
>>> arr[(arr == 0).sum(axis=1).argsort()]
array([[1, 1, 1, 1, 1],
[1, 0, 1, 1, 1],
[0, 1, 0, 1, 1],
[0, 0, 0, 0, 0]])
首先使用 (arr == 0).sum(axis=1)
计算每行中零条目的数量:这会生成数组 [5, 1, 2, 0]
。
接下来,argsort
按相应值对该数组的索引进行排序,得到 [3, 1, 2, 0]
。
最后,这个argsorted数组用于重新排列arr
的行。
附注如果您有一个矩阵m
(而不是数组),您可能需要在使用argsort
之前进行解析:
m[(m == 0).sum(axis=1).ravel().argsort()]
关于python - NumPy:按非零条目数对矩阵行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28518568/