2

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

在此处输入图像描述

我想根据以下规则将第 3 列的值放入另一个矩阵中。

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

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

4

2 回答 2

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

请注意,上面的代码将其余元素设置为零。

于 2014-11-10T04:27:46.563 回答
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);

还有其他几种方法可以做到这一点,但我认为上面的代码很容易理解。它使用线性索引


假设您没有重复的下标,您还可以使用:

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

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

另一个:

B = accumarray(A(:,[2 3]), A(:,1), [m,n]);
于 2014-11-10T04:41:34.220 回答