Python 识别矩阵中相邻元素的性质
有一个像这样的矩阵Python 识别矩阵中相邻元素的性质,python,python-3.x,matlab,numpy,matrix,Python,Python 3.x,Matlab,Numpy,Matrix,有一个像这样的矩阵 9 9 1 9 9 9 9 1 9 9 1 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 1 9 9 9 9 9 9 9 9 9 9 1 1 1 9 9 9 9 9 1 9 9 9 9 9 1 9 9 9 9 9 9 1 9 1 9 9 9 我想检测矩阵中的每个位置,是否至少有一个值1或对相关矩阵进行舍入,以便对于{2,2}中的元素,我想检查{1,1}、{1,2}、{1,3}、{2,1}、{2,3}、{3,3}中的值,如果提到的任何位置包含1,然后我将元素存储
9 9 1 9 9 9 9 1
9 9 1 9 9 9 9 9
9 9 9 9 9 9 9 9
9 9 1 9 9 9 9 9
9 9 9 9 9 1 1 1
9 9 9 9 9 1 9 9
9 9 9 1 9 9 9 9
9 9 1 9 1 9 9 9
我想检测矩阵中的每个位置,是否至少有一个值1
或对相关矩阵进行舍入,以便对于{2,2}
中的元素,我想检查{1,1}、{1,2}、{1,3}、{2,1}、{2,3}、{3,3}中的值,如果提到的任何位置包含1,然后我将元素存储在{2,2}
中的一个单独变量中
我不知道如何解决这个问题,想知道是否有任何pythonic函数或方法可以做到这一点?您可以从中获得灵感并使用conv2
在MATLAB中(您说的是“pythonic”,但标记为MATLAB),如下所示:
numneighbours = conv2( A==1, [1 1 1; 1 0 1; 1 1 1], 'same' );
现在您需要numneighbours>0
output = A(numneighbours > 0);
这当然可以在一行中完成
这是一个Python等价于MATLAB的conv2
一个可能的解决方案是一个掩码,它用一个正方形3x3指示一个值的位置,如下所示:
onesMask = mat==1;
res = imdilate(mask,strel('square',3)) & ~onesMask;
结果:
0 1 0 1 0 0 1 0
0 1 0 1 0 0 1 1
0 1 1 1 0 0 0 0
0 1 0 1 1 1 1 1
0 1 1 1 1 0 0 0
0 0 1 1 1 0 1 1
0 1 1 0 1 1 1 0
0 1 0 1 0 1 0 0
你没有表现出你所做的任何努力。我真的不知道怎么做,我需要一些帮助,这就是为什么我发布了这篇文章。这里有几个帖子可以让你开始:另外,邻居检查是康威生活游戏的一个重要组成部分。您可以检查不同的实现,看看它是如何实现的。值得注意的是,imdigrate
需要MATLAB中的图像处理工具箱。