gpt4 book ai didi

python - 计算 numpy 数组中相等相邻单元格的数量

转载 作者:行者123 更新时间:2023-11-30 22:58:02 24 4
gpt4 key购买 nike

我有不同大小的二维二进制numpy数组,其中包含某些模式。就像这样:

import numpy
a = numpy.zeros((6,6), dtype=numpy.int)
a[1,2] = a[1,3] = 1
a[4,4] = a[5,4] = a[4,3] = 1

这里的“图像”包含两个补丁,一个有 2 个连接单元,另一个有 3 个连接单元。

print a
array([[0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 1, 0]])


我想知道一个非零单元格与另一个非零单元格相邻的频率(邻居定义为车的情况,因此每个单元格左侧、右侧、下方和上方的单元格),包括它们的伪-复制(反之亦然)。

上一个approach内部边界返回错误值 (5),因为它旨在计算外部边界。

numpy.abs(numpy.diff(a, axis=1)).sum()

因此,对于上面的测试数组,正确的总结果将是 6 (上面的补丁有两个内部边框,下面的四个)。

感谢您的任何提示!

编辑:

  • 错误:下层显然有 4 个内部边缘(相邻单元格具有相同的值)

  • 进一步解释了所需的社区

最佳答案

如果是 8 个连通邻域,我认为结果是 8。这是代码:

import numpy
a = numpy.zeros((6,6), dtype=numpy.int)
a[1,2] = a[1,3] = 1
a[4,4] = a[5,4] = a[4,3] = 1

from scipy.ndimage import convolve

kernel = np.ones((3, 3))
kernel[1, 1] = 0
b = convolve(a, kernel, mode="constant")
b[a != 0].sum()

但你说的是鲁克的案子。

编辑

这是 4 个连通邻域的代码:

import numpy as np
a = np.zeros((6,6), dtype=np.int)
a[1,2] = a[1,3] = 1
a[4,4] = a[5,4] = a[4,3] = 1

from scipy import ndimage
kernel = ndimage.generate_binary_structure(2, 1)
kernel[1, 1] = 0

b = convolve(a, kernel, mode="constant")
b[a != 0].sum()

关于python - 计算 numpy 数组中相等相邻单元格的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36367531/

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