更新矩阵,每行单列,其中行索引为vecor

时间:2017-12-29 12:51:58

标签: matlab octave

有没有办法在矩阵的每一行中更新不同的列,其中行索引存储在向量中。

示例

mx = zeros(10,10);
cols = [2 3 5 4 6 8 9 1 2 3]';
for i = 1:size(mx,1)
    mx(i,cols(i)) = 1;
end
mx

产生

0   1   0   0   0   0   0   0   0   0
0   0   1   0   0   0   0   0   0   0
0   0   0   0   1   0   0   0   0   0
0   0   0   1   0   0   0   0   0   0
0   0   0   0   0   1   0   0   0   0
0   0   0   0   0   0   0   1   0   0
0   0   0   0   0   0   0   0   1   0
1   0   0   0   0   0   0   0   0   0
0   1   0   0   0   0   0   0   0   0
0   0   1   0   0   0   0   0   0   0

问题是,我是否可以在没有for循环的情况下做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用单个数字来处理矩阵中的元素。在这种情况下,元素按列编号(1-10是第一列,11-20是secound ...),并且有一个函数sub2ind来计算元素编号。在你的情况下它非常简单,因为它是一个10x10所以你可以手动完成它,但我仍然会推荐这个功能。

mx = zeros(10,10);
rows = 1:size(mx,1); %create the row indices 
cols = [2 3 5 4 6 8 9 1 2 3];
X=sub2ind(size(mx),rows,cols)
mx(X)=1;
mx