比较MATLAB中的相邻元素

Jon*_*han 2 arrays comparison matlab matrix

有谁知道如何比较数组中的元素与相邻元素?

例如,如果我有一个数组:

0 0 0 1 1 1 1 0 
0 1 1 1 1 1 1 0 
0 1 0 1 1 1 1 0
0 1 1 1 1 1 0 0
0 0 0 0 1 1 1 1
1 1 1 1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)

有没有办法循环遍历每个元素并对其周围的元素是否等于1进行逻辑测试?

小智 8

哎呀,看起来有人在做家庭作业.人生的游戏可能吗?

有很多方法可以进行这样的测试.但要学习以矢量化的形式.这包括理解matlab如何编制索引,以及如何将2-d数组的元素存储在内存中.这需要一些时间来详细解释,比我想要在这个时刻做的更多.我肯定会建议你学习它.

在那之前,我只是建议如果你真的在做生命游戏,那么最好的办法是使用conv2.从而,

A =[0     0     0     1     1     1     1     0
    0     1     1     1     1     1     1     0
    0     1     0     1     1     1     1     0
    0     1     1     1     1     1     0     0
    0     0     0     0     1     1     1     1
    1     1     1     1     1     1     1     1];

B = conv2(A,[1 1 1;1 0 1;1 1 1],'same')
B =
    1     2     4     4     5     5     3     2
    2     2     5     6     8     8     5     3
    3     4     8     7     8     7     4     2
    2     2     4     5     7     7     6     3
    3     5     6     7     7     7     6     3
    1     2     2     3     4     5     5     3
Run Code Online (Sandbox Code Playgroud)

  • +1 - 我认为任何其他解决方案都会过于复杂.`conv2`绝对是问题最优雅的解决方案. (3认同)
  • @Jacob:我同意.但只是为了回答OP的问题,也许你应该添加`B == 8`来检测其8个邻居都等于1的元素.你当然可以改变掩码来只检查直接的4个邻居(没有对角线) ) (2认同)

Yai*_*man 5

Loren最近发布了关于这个问题的文章:http://blogs.mathworks.com/loren/2010/01/19/mathematical-recreations-tweetable-game-of-life/ - 通过研究,可以学到很多有趣的东西.该帖子中的代码及其评论