MATLAB中如何通过索引矩阵设置目标矩阵?
实现方法:利用MATLAB线性索引快速赋值
首先,咱们先明确核心逻辑:你需要根据INDEX矩阵指定的位置(索引),从A矩阵中提取元素来构建MATRIX。这里要注意MATLAB默认的列优先线性索引规则,不过也可以灵活调整成行优先,下面分两种常见情况说明:
情况1:按MATLAB默认的列优先索引提取
MATLAB中,任何矩阵都可以通过线性索引访问,默认是按列遍历的。比如你的A矩阵:
A = [1 4 5; 2 9 1]; % 标准MATLAB矩阵写法,比嵌套括号更常用
它的列优先线性索引对应关系是:
- 索引1 → A(1,1)=1
- 索引2 → A(2,1)=2
- 索引3 → A(1,2)=4
- 索引4 → A(2,2)=9
- 索引5 → A(1,3)=5
- 索引6 → A(2,3)=1
如果你的INDEX矩阵里的数字就是这个列优先的索引,那一行代码就能搞定:
INDEX = [5 1 3; 1 3 2; 2 1 3]; MATRIX = A(INDEX); % 直接用INDEX作为索引矩阵提取元素
运行后得到的MATRIX是:
5 1 4 1 4 2 2 1 4
情况2:按行优先索引提取
如果你希望INDEX对应的是行优先的索引(也就是按行遍历A的顺序),那先把A转成一维行向量,再提取:
A_flat = reshape(A, 1, []); % 行优先展开A,得到[1 4 5 2 9 1] MATRIX = A_flat(INDEX);
运行后得到的MATRIX是:
9 1 5 1 5 4 4 1 5
关于你例子中的小疑问
你给出的目标MATRIX里出现了3,但原A矩阵中并没有这个元素,这大概率是笔误~比如第三行第一个元素应该是9,这样就能对应上逻辑啦。
内容的提问来源于stack exchange,提问作者Martin Domino
相关产品推荐
相关产品推荐

