Распаковка матрицы на Matlab - PullRequest
0 голосов
/ 06 мая 2020

Я хотел бы построить матрицу C из матрицы B, следуя этим инструкциям: Если у меня есть матрица B = B0 + B1 + ... + Bs = [B0 ; B1 ;...; Bs], где s - натуральное число, а B имеет размер n1 * n2 .

Тогда матрица C получается следующим образом:

enter image description here

Размер B равен: n1 * n2

Размерность C: (L+s) * n1 * Ln2

Пример: B = [3 3] = B0 + B1 + B2 = [1 1] + [1 1] + [1 1] = [1 1 ; 1 1 ; 1 1] с s = 2 и L = 4

Матрица C получается:

enter image description here

С размерами: B = 1 * 2 и C = (4+2)*1*4*2 = 6 * 8

Спасибо!

1 Ответ

2 голосов
/ 06 мая 2020

Ваша матричная запись не имеет большого смысла, особенно в MATLAB, поскольку вы пишете:

[1 1] + [1 1] + [1 1] = [1 1 ; 1 1 ; 1 1]

Это равенство неверно, так как LHS имеет размер [1 2], а RHS имеет размер [3 2]. Если бы вы могли лучше объяснить это, мы могли бы попробовать более общий код.


Чтобы решить приведенный вами пример:

B = [1 1
    1 1
    1 1];
s = 2;
L = 4;

c = [B ; zeros(size(B))];
C = zeros(L+s,L*s);
for ii=1:L
    C(:,2*ii-1:2*ii) = circshift(c,ii-1,1);
end
C =

     1     1     0     0     0     0     0     0
     1     1     1     1     0     0     0     0
     1     1     1     1     1     1     0     0
     0     0     1     1     1     1     1     1
     0     0     0     0     1     1     1     1
     0     0     0     0     0     0     1     1

Однако, вероятно, есть лучшее однострочное решение, избегающее for-l oop.

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