【发布时间】:2016-07-21 22:06:56
【问题描述】:
我有不同大小的二维二进制 numpy arrays,其中包含某些模式。
就像这样:
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]])
我想知道一个非零单元格与另一个非零单元格接壤的频率(邻居定义为 rook 的情况,因此每个单元格左侧、右侧、下方和上方的单元格)包括它们的伪复制(反之亦然)。
之前的 approach 用于计算外边界返回错误值 (5)。
numpy.abs(numpy.diff(a, axis=1)).sum()
所以对于上面的测试数组,正确的总结果应该是 6(上面的补丁有两个内部边界,下面有四个)。
感谢任何提示!
编辑:
错误:下层明显有4条内边(相邻单元格值相同)
详细解释了所需的社区
【问题讨论】:
-
“邻居定义为车的情况”是什么意思?
-
为什么低位是六?
-
嗯,显而易见的解决方案是对索引和计数进行双循环。
-
我需要检查每个单元格(车)左、右、下方和上方的邻居是否等于中心单元格。 @HYRY:错了,抱歉。较低的有4个内部边界(单元格相邻的单元格具有相同的值)
标签: python numpy multidimensional-array scipy mathematical-morphology