Как я могу использовать значения в матрице MATLAB в качестве индексов для определения местоположения данных в новой матрице?

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

Я хочу взять столбец 3 значений и поместить их в другую матрицу согласно следующему правилу.

Значение в столбце 5 - это индекс строки для новой матрицы, а в столбце 6 - индекс столбца. Поэтому 20 (из 29,3) должно быть в строке 1 столбца 57 новой матрицы, 30 (из 30,3) должно быть в строке 1 столбца 4 новой матрицы и так далее.

Если в столбце 3 указано значение NaN, я хочу скопировать NaN в новую матрицу.

2 ответа

Решение

Пример:

% matrix of values and row/column subscripts
A = [
 20  1 57
 30  1 4
 25  1 16
 nan 1 26
 nan 1 28
 25  1 36
 nan 1 53
 50  1 56
 nan 2 1
 nan 2 2
 nan 2 3
 80  2 5
];

% fill new matrix
B = zeros(5,60);
idx = sub2ind(size(B), A(:,2), A(:,3));
B(idx) = A(:,1);

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


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

B = full(sparse(A(:,2), A(:,3), A(:,1), m, n));

(где m а также n размер выходной матрицы)

Другой:

B = accumarray(A(:,[2 3]), A(:,1), [m,n]);

Я не уверен, правильно ли я понял ваш вопрос, но это может помочь:

(Предполагая, что ваша основная матрица A)

nRows = max(A(:,5));
nColumns = max(A(:,6));

FinalMatrix = zeros(nRows,nColumns);

for i=1:size(A,1)
    FinalMatrix(A(i,5),A(i,6))=A(i,3);
end

Обратите внимание, что приведенный выше код устанавливает остальные элементы равными нулю.

Другие вопросы по тегам