Матричные узоры - PullRequest
       4

Матричные узоры

2 голосов
/ 21 ноября 2011

У меня есть две матрицы 9x9, A и B.

Я хотел бы создать большую матрицу C со следующим шаблоном

 A B B B B B
 B A B B B B
 B B A B B B
 B B B A B B
 B B B B A B
 B B B B B A

Как видите, матрицы Aна диагонали B везде.Я пытаюсь создать код, чтобы этот шаблон продолжался независимо от размеров.

Например, 10 матриц х 10 матриц по-прежнему имеют матрицу A по диагонали и B везде в другом месте.

Лучше всего использовать horzcat и vertcat или что-то еще, например blkdiag?Я бы предпочел не преобразовывать эти матрицы в ячейки, поскольку матрицы A и B. уже содержат информацию.

Спасибо всем, что нашли время прочитать.

Ответы [ 3 ]

3 голосов
/ 21 ноября 2011

Как насчет (уточнено)

maskcell = repmat( {ones(size(A))}, 1, 10 );
maskdiag = blkdiag( maskcell{:} );
AA = repmat( {A}, 1, 10 );
AD = blkdiag( AA{:} );
BB = repmat( B, 10, 10 );
C = BB .* (maskdiag == 0) + AD

Исходя из полностью действительных комментариев ниже, я добавил «маску», чтобы убедиться, что правильные фрагменты выбраны из C.

1 голос
/ 21 ноября 2011

C = B (~ глаз (размер (B))) + A (глаз (размер (A))) должен получить то, что вы хотите.Может быть, более быстрый способ сочетать использование глаз, хотя ...

0 голосов
/ 12 ноября 2012

крон (глаз (10), А) + крон (~ глаз (10), В)

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