Matlab:使用列\行索引对分配给矩阵

时间:2011-08-19 09:27:46

标签: matlab indexing matrix variable-assignment

  

可能重复:
  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会将其解释为选择rc的每个可能组合并为其指定值,例如

n=5;
A=zeros(n);
r=1:n;
c=1:n;

A(r,c)=1;

产生一个矩阵,我希望得到单位矩阵,因为我希望每个A(r(i),c(i))==1 i,只有对角线上的元素才会受到影响。

如果没有for循环,我怎样才能达到预期效果?

1 个答案:

答案 0 :(得分:16)

好的,我找到了答案 - 需要使用线性索引,即将列\行对转换为单个索引:

idx = sub2ind(size(A), r,c);
A(idx)=v;