簡體   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