[英]NumPy: sort matrix rows by number of non-zero entries
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]
(arr == 0).sum(axis=1)
[5, 1, 2, 0]
。
接下來, argsort
通過其相應的值對數組的索引進行排序,得到[3, 1, 2, 0]
argsort
[3, 1, 2, 0]
。
最后,此argsorted數組用於重新排列arr
的行。
PS:如果您有矩陣m
(而不是數組),則可能需要在使用argsort
之前先argsort
:
m[(m == 0).sum(axis=1).ravel().argsort()]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.