繁体   English   中英

如何提取 numpy 数组的非零值

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM