计算数组中非零值的范围

时间:2018-03-22 19:12:52

标签: python numpy

假设我有一个2-D numpy数组import Test from './Test.vue'; ,我如何计算第一个非零x元素和最后一个非零x元素之间的元素数。到目前为止,我使用

计算第一个非零元素的索引的位置
A
然后我可以从数组的末尾开始为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()xMin但是有更有效的方法吗?

1 个答案:

答案 0 :(得分:3)

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