首页 文章

Matlab:用列\行索引对分配给矩阵[重复]

提问于
浏览
8

可能重复:如何更改矩阵中多个点的值?

我有一个矩阵 A 和三个相同长度的向量, r ,保存要分配的行的索引, c ,保存要分配的列的索引,以及 v 包含要分配的实际值 .

对于所有 i ,我想得到的是 A(r(i),c(i))==v(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 回答

  • 15

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

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

相关问题