有没有办法在矩阵的每一行中更新不同的列,其中行索引存储在向量中。
示例
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循环的情况下做到这一点?
答案 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