Сравнение смежных элементов в MATLAB - PullRequest
2 голосов
/ 13 февраля 2010

Кто-нибудь знает, как я могу сравнить элементы в массиве с соседними элементами?

Например, если у меня есть массив:

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

Есть ли способ циклически проходить через каждый элемент и выполнять логическую проверку того, равны ли элементы вокруг него 1?

Ответы [ 2 ]

8 голосов
/ 13 февраля 2010

Упс, похоже, кто-то выполняет домашнее задание. Может, игра в жизнь?

Есть много способов сделать такой тест. Но научитесь делать это в векторизованной форме. Это подразумевает понимание того, как matlab выполняет индексацию и как элементы двумерного массива хранятся в памяти. Это займет некоторое время, чтобы объяснить в деталях, больше, чем я хочу сделать в данный момент. Я определенно рекомендую вам изучить его.

До этого я просто предлагаю, чтобы, если вы действительно играете в жизнь, то лучшим приемом будет использование 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
5 голосов
/ 13 февраля 2010

Лорен недавно написал об этой самой проблеме: http://blogs.mathworks.com/loren/2010/01/19/mathematical-recreations-tweetable-game-of-life/ - много интересного можно узнать, изучив код в этом посте и его комментарии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...