gpt4 book ai didi

python - 在 numpy 二维数组中查找与零相邻的非零元素数

转载 作者:太空狗 更新时间:2023-10-30 00:58:17 26 4
gpt4 key购买 nike

给定一个矩阵,我想计算与空(零)单元格相邻的填充元素(非零单元格)的数量,其中邻接沿行(左/右)。

我试过使用 np.roll 和减法矩阵,但我不确定如何在没有循环的情况下编写代码。

例如,给定矩阵:

arr = 
[[1 1 0 0 0 0 0 0 1 0]
[1 1 0 0 0 0 0 1 1 1]
[0 1 1 0 0 0 0 0 0 0]
[0 1 1 0 0 0 0 0 0 0]
[0 1 1 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]]

我们有 12 个与零相邻的非零元素。

最佳答案

方法 #1

我们可以使用2D convolutionzeros 上使用适当的内核 ([1,1,1])([1,0,1]) 来解决它mask 并寻找卷积总和为 >=1,这表明三个元素的每个滑动窗口中至少有一个零,并且通过对当前元素非零的额外检查确认存在至少一个相邻的 0

实现看起来像这样-

In [245]: a  # input array
Out[245]:
array([[1, 1, 0, 0, 0, 0, 0, 0, 1, 0],
[1, 1, 0, 0, 0, 0, 0, 1, 1, 1],
[0, 1, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])

In [246]: from scipy.signal import convolve2d

In [248]: k = [[1,1,1]] # kernel for convolution

In [249]: ((convolve2d(a==0,k,'same')>=1) & (a!=0)).sum()
Out[249]: 12

方法 #2

另一种方法是使用切片,因为我们会沿着每一行寻找一次性偏移元素,以匹配左侧和右侧的零和非零 LHS RHS 最后将它们相加 -

maskRHS = (a[:,1:]==0) & (a[:,:-1]!=0)
maskLHS = (a[:,1:]!=0) & (a[:,:-1]==0)
maskRHS[:,1:] |= maskLHS[:,:-1]
out = maskRHS.sum() + maskLHS[:,-1].sum()

关于python - 在 numpy 二维数组中查找与零相邻的非零元素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55402724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com