识别矩阵中邻近元素的属性

时间:2018-04-24 12:03:28

标签: 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,那么我将{1,1}, {1,2}, {1,3}, {2,1}, {2,3}, {3,1}, {3,2}, {3,3}中的元素存储在一个单独的变量中。

我不知道怎么弄这个,想知道是否有任何pythonic功能或方法可以做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以从this question获取灵感并使用conv2

在MATLAB中(您说“pythonic”但标记为MATLAB),如下所示:

numneighbours = conv2( A==1, [1 1 1; 1 0 1; 1 1 1], 'same' );

现在你想要numneighbours > 0

的任何元素
output = A(numneighbours > 0);

这当然可以在一行中完成。

This answer建议convolve2d是Python的等效于MATLAB的conv2

答案 1 :(得分:1)

一个可能的解决方案是dilating一个掩码,它指示一个值的位置,方块为3x3 structuring element,如下所示:

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