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