簡體   English   中英

Numpy 沿列向下推非零值

[英]Numpy push non-zero values down along the column

我有一個二維 numpy 矩陣,我想將所有非零值沿列向下推。 我更喜歡不包含循環的方式。 例如將這個before_matrix變成這個after_matrix保持數字的順序也很重要。 沿着柱子。 將這樣的列 [2, 0, 1, 0, 0] 制作成 [0, 0, 0, 2, 1]

非常感謝

在二值化數組上使用穩定的 argsort

# make example
>>> from scipy import sparse
>>> 
>>> exmpl = sparse.random(5,4,0.5).A
>>> 
>>> exmpl
array([[0.        , 0.        , 0.61062949, 0.        ],
       [0.85030071, 0.81443545, 0.        , 0.82208658],
       [0.0258324 , 0.77722165, 0.        , 0.        ],
       [0.        , 0.        , 0.4879589 , 0.        ],
       [0.        , 0.28429359, 0.59514095, 0.06782943]])

# sort it
>>> exmpl[(exmpl!=0).argsort(0,kind="stable"),np.arange(4)]
array([[0.        , 0.        , 0.        , 0.        ],
       [0.        , 0.        , 0.        , 0.        ],
       [0.        , 0.81443545, 0.61062949, 0.        ],
       [0.85030071, 0.77722165, 0.4879589 , 0.82208658],
       [0.0258324 , 0.28429359, 0.59514095, 0.06782943]])
>>> 

您可以按列排序。

np.sort(matrix, axis=0)

對於每一列,將數組拆分為非零元素和零元素。 然后將它們與最后的非零元素重新組合。

import numpy as np
column = np.array([1, 0, 2, 0, 0])
n = len(column)

nz = column[np.nonzero(column)] # nonzero elements
ze = np.zeros(n-len(nz)-1) # zeros

new_column = np.array([*ze,*nz]) # combining

您還可以使用 np.concatenate([ze,nz]) 重新組合它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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