使用矩阵元素作为另一个矩阵的索引

时间:2014-07-18 15:34:10

标签: matlab

我有一个名为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循环的情况下实现这一点。

1 个答案:

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