[英]How to extract non-zero values of a numpy array
我有一個 numpy 數組,想從中提取一些值。 這是我的數組:
arr= array([[0, 0, 23, 28],
[0, 19, 24, 29],
[0, 20, 25, 30],
[17, 21, 26, 31],
[18, 22, 27, 32]])
我想首先對它的非零部分進行排序並將其更改為:
arr= array([[0, 0, 27, 32],
[0, 22, 26, 31],
[0, 21, 25, 30],
[18, 20, 24, 29],
[17, 19, 23, 28]])
然后,從第一列中,我想提取最后兩行(18 和 17)。 在第二列中,我有四個非零一:這意味着與前一列相比還有 2 個非零行。 所以,我想要兩個上面的行。 在第三列中,我看到五個非零行,比第二行多一行,所以我想要一行。 在最后一列中,它的非零行與前一個零的差異,所以我不想要它的任何行。 最后。 我想將這些提取的數字作為列表或 numpy 數組:
result= [17, 18, 21, 22, 27]
我嘗試了以下方法,但它完全成功:
result=[]
for m in range (len (arr[0,:])):
for i in range (len (arr[:,m])):
if arr[i,m]==0 and arr[i+1,m]!=0:
b= arr[i+1:,m]
result.append (b)
我提前感謝任何幫助。
我們試試看:
mask = arr != 0
# mask the 0 with infinity and sort
new_arr = np.sort(np.where(mask, arr, np.inf), axis=0)
# replace back:
arr[:] = np.where(mask, new_arr[::-1], 0)
# extract the result
result = arr[np.arange(arr.shape[0]),mask.argmax(axis=1)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.