我有一个名为weightmat
的m乘n的0矩阵。
我有一个名为placeIn
的独特随机整数的m×k矩阵,其中k <1}。 n,placeIn
中最大的元素是&lt; = n。
我正在尝试将placeIn
的元素放入weightmat
,并将其值用作行索引。如果某一行placeIn
中有一个4,我希望将4放在weightmat
的相应行的第4列中。以下是我所做的示例代码:
% create placeIn
placeIn = [];
for pIx = 1:5
placeIn = [placeIn; randperm(9,3)];
end
display(placeIn)
weightmat = zeros(5,10);
for pIx = 1:5
for qIx = 1:3
weightmat(pIx,placeIn(pIx,qIx)) = placeIn(pIx,qIx);
end
end
display(weightmat)
有没有矢量化的方法来做到这一点?我想在没有嵌套for循环的情况下实现这一点。
答案 0 :(得分:3)
技巧是sub2ind
:
% First generate the row indices used for the indexing. We'll ignore the column.
[r c] = meshgrid(1:size(placeIn, 2), 1:size(placeIn,1));
weightmat = zeros(5,10);
% Now generate an index for each (c, placeIn) pair, and set the corresponding
% element of weightmat to that value of placeIn
weightmat(sub2ind(size(weightmat), c, placeIn)) = placeIn;