更新矩阵,每行单列,其中行索引在向量中
Update matrix, single column per row where row index is in vecor
有没有办法更新矩阵的每一行中的不同列,其中行索引存储在向量中。
例子
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-10 是第一列,11-20 是第二列...)并且有一个函数 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
有没有办法更新矩阵的每一行中的不同列,其中行索引存储在向量中。
例子
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-10 是第一列,11-20 是第二列...)并且有一个函数 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