计算数组中非零值的范围

2024-04-24 07:06:58 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个二维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,但是有没有更有效的方法来做到这一点?你知道吗


Tags: inimportnumpy元素forsizeasnp
1条回答
网友
1楼 · 发布于 2024-04-24 07:06:58

是的,你可以用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

相关问题 更多 >