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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:51:56