簡體   English   中英

NumPy:按非零條目數對矩陣行進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM