如何使用MATLAB矩阵中的值作为索引来确定新矩阵中数据的位置?

时间:2014-11-10 03:39:51

标签: matlab matrix matrix-indexing

我有一个如下所示的矩阵。

enter image description here

我想根据以下规则获取第3列值并将它们放在另一个矩阵中。

第5列中的值是新矩阵的行索引,第6列是列索引。因此,20(取自29,3)应该在新矩阵的第1行第57列中,30(来自30,3)应该在新矩阵的第1行第4列中,依此类推。

如果第3列中的值是NaN,那么我希望将NaN复制到新矩阵。

2 个答案:

答案 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));

(其中mn是输出矩阵大小)

另一个:

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