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

Posted

技术标签:

【中文标题】Matlab:分配给具有列\\行索引对的矩阵[重复]【英文标题】:Matlab: assign to matrix with column\row index pairs [duplicate]Matlab:分配给具有列\行索引对的矩阵[重复] 【发布时间】:2011-10-30 11:31:11 【问题描述】:

可能重复:How can I change the values of multiple points in a matrix?

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

我想要得到的是所有iA(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;

产生一个矩阵,我想在其中获得单位矩阵,因为我想要每个 iA(r(i),c(i))==1,即只有对角线上的元素应该受到影响。

如何在没有for 循环的情况下达到预期的效果?

【问题讨论】:

类似问题:Converting a matlab matrix to a vector @Amro - 虽然我同意这两个问题的答案非常相似,但问题是不同的 - 我想知道如何分配给矩阵,而另一个问题想知道如何隐藏矩阵转化为向量。在寻找我的问题的答案时,一个人不会到达另一个问题。 我没有对你投反对票,我只是将另一个问题链接为相似(而不是投票关闭为重复).. How can I change the values of multiple points in a matrix?的可能重复 【参考方案1】:

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

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

【讨论】:

以上是关于Matlab:分配给具有列\行索引对的矩阵[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MATLAB 中为矩阵的特定位置赋值?

方程组稀疏矩阵索引的MATLAB存储器管理

MATLAB中如何构造一个矩阵,该矩阵中每一列个数不等

最小值矩阵 A 在第 2 到第 3 行和第 2 列的索引行和索引列

表示具有列/行标签的矩阵

MATLAB 查找并将函数应用于重复索引的值