【问题标题】:Optimize feature normalization code [duplicate]优化特征规范化代码[重复]
【发布时间】:2016-04-14 09:45:45
【问题描述】:

给定一个矩阵X 具有任意数量的列和行(每一行代表数据集的一个特征),我想将每个值标准化为((value - column mean) / column standard deviation)。我想出了以下代码,它有效。这可以针对更少的计算进行优化还是最优?

mu = mean(X);
sigma = std(X);
x_ones = ones(size(X));
zero_mean_X = X - x_ones * diag(mu);
X_norm = zero_mean_X ./ (x_ones * diag(sigma));

【问题讨论】:

    标签: matlab performance optimization octave


    【解决方案1】:

    这是使用 Matlab 中的 bsxfun 进行的优化

    M = mean(X);
    S = std(X);
    Y = bsxfun(@minus,X, M);
    Y = bsxfun(@rdivide, Y, S);
    

    快了4倍

    X = rand(1000);
    
    t = zeros(100,2);
    for ii = 1:100
        tic;
        M = mean(X);
        S = std(X);
        Y = bsxfun(@minus,X, M);
        Y = bsxfun(@rdivide, Y, S);
        t(ii,1) = toc;
    end
    
    
    for ii = 1:100
        tic;
        mu = mean(X);
        sigma = std(X);
        x_ones = ones(size(X));
        zero_mean_X = X - x_ones * diag(mu);
        X_norm = zero_mean_X ./ (x_ones * diag(sigma));
        t(ii,2) = toc;
    end
    
    figure('Color', 'w');
    plot(t);
    legend({'bsxfun', 'matrix'});
    xlabel('NUmber of simulations');
    ylabel('Time');
    

    【讨论】:

    • 完美。谢谢你。速度测试是一个不错的奖励。好工具。
    • 在接受答案之前等待 - 一些高级用户可能会加入聚会!
    • @marsei 除了bsxfun,没有比这更好的方法了。事实上,我标记的副本将此作为最好的方法。
    猜你喜欢
    • 1970-01-01
    • 2015-08-24
    • 2020-07-20
    • 1970-01-01
    • 2014-02-17
    • 2012-02-06
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多