Matlab中cellfun的速度优化

在做实验中需要用到matlab的cellfun,但是使用后速度巨慢无比,原因就在于cellfun中的函数上。注意,matlab最擅长的是矩阵运算,是矩阵运算,是矩阵运算!重要的事情说三遍!尽量把嵌套在cellfun中的函数表达能矩阵运算的形式,速度上会有显著提升!例如,我需要对每个cell表格中的8个二值向量转化为十进制的数,原始的代码为:

vertical_diff_feature=cellfun(@FeatureEncoding,vertical_diff_cell);

function feature_value = FeatureEncoding(number_vector)
[m,n]=size(number_vector);
if m>n
    number_vector=number_vector';
end
feature_value=bin2dec(num2str(number_vector))/255;
end

注意,这里用到了bin2dec ,num2str两个函数,这是导致运算缓慢的罪魁祸首!一定要改成矩阵运算的形式,例如:

B=2.^[7:-1:0]*A

速度一下子就上来了!

你可能感兴趣的:(MATLAB)