Преобразование матрицы в MATLAB - PullRequest
2 голосов
/ 24 октября 2010

Допустим, у меня есть вектор a = [1 2 4].Я хочу, чтобы он был преобразован в вектор, который выглядит следующим образом b = [1 2 0 4], т. Е. Каждое число помещается в правильную позицию и, поскольку 3 не входит в вектор a, оно заменяется на 0 в векторе * 1006.*.Это можно сделать следующим образом:

a = [1 2 4]
b = zeros(1, size(a, 2));
b(1, a) = a;

Я не могу найти способ сделать то же самое для матрицы.Например,

c = [1 4 2 0; 3 1 0 0; 4 0 0 0; 1 3 4 0];

Мне нужно преобразовать в матрицу, которая выглядит следующим образом:

d = [1 2 0 4; 1 0 3 0; 0 0 0 4; 1 0 3 4];

Любые советы?Как это может быть сделано?Как я могу сделать это без использования петель?

Ответы [ 2 ]

2 голосов
/ 24 октября 2010

Вот векторизованное решение:

a = [1 4 2 0; 3 1 0 0; 4 0 0 0; 1 3 4 0];
b = zeros(size(a,1),max(a(:)));
[rowIdx,~] = find(a);
vals = a(a>0);
b( sub2ind(size(b),rowIdx,vals) ) = vals;
1 голос
/ 24 октября 2010

Это работает?(Отредактировано: исправлена ​​ошибка.)

[m,n] = size(c)
d = zeros(m,n)
for i=1:m
    d(i,c(i,c(i,:)>0)) = c(i,c(i,:)>0)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...