如何在Matlab中通过向量化优化基于向量参数的绘图操作?
向量化替换Matlab循环提取内部点的实现
修改后的完整代码
function area = MitchellLitvinov_areaCalc(n) % 创建范围在(3,14)内的随机坐标向量 x = rand(n, 1) * 11 + 3; y = rand(n, 1) * 11 + 3; % 找出所有位于oracle内部的点 inOracle = oracle([x y]); % 计算比例,乘以总面积得到oracle的面积 numPointsInOracle = nnz(inOracle); area = numPointsInOracle/n * (11*11); % 【向量化替换循环】提取位于oracle形状内的点 oracleCoordinates = [x(inOracle), y(inOracle)]; % 绘制所有oracle内部的点 scatter(oracleCoordinates(:,1), oracleCoordinates(:,2)) title("Oracle Shape") xlim([3, 14]); ylim([3, 14]); end
核心优化说明
- 直接用逻辑索引替代原有的循环逻辑:Matlab中布尔数组(如
inOracle)可直接作为索引,筛选出对应位置为true的元素。x(inOracle)会返回所有在oracle内部的点的x坐标,y(inOracle)同理,将两者按列拼接即可得到目标坐标矩阵,无需预先创建空矩阵或手动维护索引变量。 - 优势:
- 速度远超显式循环,尤其是当样本量
n很大(成像场景常用大样本)时,Matlab的底层向量优化会充分发挥作用。 - 代码更简洁,减少手动管理索引的出错概率。
- 速度远超显式循环,尤其是当样本量
进一步简化提示
如果不需要单独存储oracleCoordinates,可以直接在绘图时使用逻辑索引,省略中间变量:
scatter(x(inOracle), y(inOracle))
这样能节省内存,进一步提升运行效率。
内容的提问来源于stack exchange,提问作者mLit Ivan
相关产品推荐
相关产品推荐

