我有一个如下所示的矩阵。
我想根据以下规则获取第3列值并将它们放在另一个矩阵中。
第5列中的值是新矩阵的行索引,第6列是列索引。因此,20(取自29,3)应该在新矩阵的第1行第57列中,30(来自30,3)应该在新矩阵的第1行第4列中,依此类推。
如果第3列中的值是NaN,那么我希望将NaN复制到新矩阵。
答案 0 :(得分:1)
我不确定我是否清楚地理解了你的问题,但这可能有所帮助:
(假设你的主矩阵是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
请注意,上面的代码将其余元素设置为零。
答案 1 :(得分:1)
示例:
% 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);
还有其他几种方法可以做到这一点,但我认为上面的代码很容易理解。它正在使用linear indexing。
假设您没有重复的下标,您还可以使用:
B = full(sparse(A(:,2), A(:,3), A(:,1), m, n));
(其中m
和n
是输出矩阵大小)
另一个:
B = accumarray(A(:,[2 3]), A(:,1), [m,n]);