可能重复:
How can I change the values of multiple points in a matrix?
我有一个矩阵A
和三个长度相同的向量r
,保存要分配的行的索引c
,保存要分配的列的索引to,和v
包含要分配的实际值。
对于所有A(r(i),c(i))==v(i)
,我想得的是i
。但是做了
A(r,c)=v;
不会产生正确的结果,因为matlab会将其解释为选择r
和c
的每个可能组合并为其指定值,例如
n=5;
A=zeros(n);
r=1:n;
c=1:n;
A(r,c)=1;
产生一个矩阵,我希望得到单位矩阵,因为我希望每个A(r(i),c(i))==1
i
,只有对角线上的元素才会受到影响。
如果没有for
循环,我怎样才能达到预期效果?
答案 0 :(得分:16)
好的,我找到了答案 - 需要使用线性索引,即将列\行对转换为单个索引:
idx = sub2ind(size(A), r,c);
A(idx)=v;