Beyond Birthday 2023-02-15 10:55 采纳率: 25%
浏览 17

matlab代码的优化,涉及大小可变的数组以及整体的算法

请教一下,matlab程序里像x这样的大小会不断变化的数组,该怎样优化能提高运算效率啊?除了提前把大小合适的x设置出来进行内存空间的分配以外还有别的方法吗?
对于这段代码的整体运算,有没有什么能提高其运算效率的方法?在算法上能不能进行修改优化啊?

img

具体代码如下所示,其中的matrix就是一个二维矩阵

function result = delta(matrix)
% Calculate the standardized delta value of the input matrix
    x = [];
    
    for i1 = 1:(size(matrix,1) - 1)
         for i2 = i1 + 1:size(matrix,1)
            t = max(abs(matrix(i1,:)-matrix(i2,:)));
            x = [x,t];
        end
    end
    rs = max(x);
    denominator = max(max(matrix))-min(min(matrix));
    result = rs/ denominator;
end
  • 写回答

1条回答 默认 最新

  • GISer Liu 2023-02-15 12:06
    关注

    以下答案引用自GPT-3大模型,请合理使用:

    优化后的效果
    
    1、针对x这个大小可变的数组,可以采用pre-allocation的方法,即在程序中提前进行内存分配,避免每次追加数据时都要重新分配内存,因此可以修改上述代码如下:
    function result = delta(matrix)
    % Calculate the standardized delta value of the input matrix
        x = zeros(1,(size(matrix,1)*(size(matrix,1)-1))/2); % 在此提前进行内存分配
        
        k = 1;
        for i1 = 1:(size(matrix,1) - 1)
             for i2 = i1 + 1:size(matrix,1)
                t = max(abs(matrix(i1,:)-matrix(i2,:)));
                x(k) = t;
                k = k+1;
            end
        end
        rs = max(x);
        denominator = max(max(matrix))-min(min(matrix));
        result = rs/ denominator;
    end
    
    2、对于整体的算法而言,可能可以减少循环的次数来提高算法的效率,例如以下的修改:
    function result = delta(matrix)
    % Calculate the standardized delta value of the input matrix
        x = zeros(1,(size(matrix,1)*(size(matrix,1)-1))/2); 
        
        k = 1;
        for i1 = 1:(size(matrix,1) - 1)
             t1 = matrix(i1,:);
             for i2 = i1 + 1:size(matrix,1)
                t2 = matrix(i2,:);
                x(k) = max(abs(t1-t2));
                k = k+1;
            end
        end
        rs = max(x);
        denominator = max(max(matrix))-min(min(matrix));
        result = rs/ denominator;
    end
    本次修改将减少matrix矩阵提取操作次数,由此可以提高其运行效率。
    

    如果我的回答解决了您的问题,请采纳我的回答

    评论

报告相同问题?

问题事件

  • 创建了问题 2月15日

悬赏问题

  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画
  • ¥15 TeleScan不能修改bar
  • ¥100 请问我基于逐飞库写的这个有关于mp u6050传感器的函数,为什么输出的值是固定的?
  • ¥15 hadoop中启动hive报错如下怎么解决
  • ¥15 如何优化QWebEngineView 加载url的速度
  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息
  • ¥15 Spring Boot离线人脸识别