繁体   English   中英

计算数组中非零值的范围

[英]Calculate The Extent Of Non-Zero Values In An Array

假设我有一个二维numpy数组A ,如何计算第一个非零x元素和最后一个非零x元素之间的元素数。 到目前为止,我正在使用以下方法计算第一个非零元素的索引位置

import numpy as np
A = np.array([[0, 0, 3],[0, 4, 2],[0, 7, 0],[0, 0, 0]])
for row in range(np.size(A,1)):
    if A[:,row].any():
        xMin = row
        break
print(xMin)

然后,我可以从数组末尾开始为xMax做类似的事情,并计算差值。 该数组代表一个板,我想找到板上项目的范围/程度。 我想知道是否有可能使用np.nonzero()查找非零元素或剥离非零元素数组。 最简单的想法是仅遍历电路板的所有元素并跟踪xMinxMax但是有没有更有效的方法呢?

是的,您可以使用np.nonzero() 第一项是非零项目的第一个出现,最后一个是最后一个出现。 然后,您可以使用阵列的形状(行的长度)来计算介于两者之间的项目数。

In [56]: x, y = A.shape

In [57]: (s, *rest, l),(ss, *rest, ll) = np.nonzero(A)

# without counting start and end
In [58]: (l - s) * y - (ss - ll) - 1
Out[58]: 4

# Counting start and end 
In [59]: (l - s) * y - (ss - ll) + 1
Out[59]: 6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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