You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB如何基于另一矩阵的索引实现无循环矩阵取值优化

Matlab 无循环向量化索引实现方案

原循环的核心逻辑是逐列取值:对第i列,固定取矩阵c的第a(i)行,再按b(:,i)给出的列号取对应元素,拼接为结果矩阵d的第i列。可以直接通过Matlab的矩阵索引特性完全替换for循环,运行效率会有数量级提升。


实现代码

全版本兼容写法

不需要考虑Matlab版本差异,用内置函数转换线性索引即可,逻辑和原循环100%等价:

% 生成和b同维度的行索引矩阵,每一列填充对应位置的a(i)值
row_idx = repmat(a, size(b, 1), 1);
% 将行列索引转换为c对应的线性索引,一次性批量取值
d = c(sub2ind(size(c), row_idx, b));

R2016b及以上版本极简写法

高版本Matlab支持隐式数组广播,不需要手动复制行索引,直接计算线性索引即可,运行速度更快:

% 利用广播自动对齐a和b的维度,直接计算线性索引批量取值
d = c(a + (b - 1) * size(c, 1));

说明

  • 两种写法得到的结果d和原for循环输出完全一致,不存在值偏差
  • 当n1规模较大(如十万级以上)时,向量化实现的运行速度通常是未优化for循环的数十倍,即使原循环提前做了d的内存预分配,向量化方案依然有明显性能优势
  • 不需要额外对结果矩阵做维度调整,输出的d尺寸和原循环得到的d完全相同,为size(b,1) × n1

内容的提问来源于stack exchange,提问作者Danny Garside

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 07:33:19