Как я могу использовать значения в матрице 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
Обратите внимание, что приведенный выше код устанавливает остальные элементы равными нулю.