在MATLAB中替代dec2hex?

时间:2015-02-19 09:38:30

标签: matlab hex decimal

我在MATLAB中使用dec2hex最多100次。因此,代码的速度降低了。有一点,我使用dec2hex 100次。它需要1分钟或更长时间。我已经做了相同的5000分。但由于dec2hex,运行需要数小时。那么如何才能最佳地进行十六进制到十进制转换呢?是否可以使用其他替代方法代替dec2hex

例如:

%%Data[1..256]: can be any data from 
for i=1:1:256
Table=dec2hex(Data);
%%Some permutation applied on Data
end;

这里我使用dec2hex一次超过100次。我必须使用它5000点。

数据=

 Columns 1 through 16

 105   232    98   250   234   216    98   199   172   226   250   215   188    11    52   174

 Columns 17 through 32

 111   181    71   254   133   171    94    91   194   136   249   168   177   202   109   187

 Columns 33 through 48

  232   249   191    60   230    67   183   122   164   163    91    24   145   124   200   142

我的代码将使用此类数据。

1 个答案:

答案 0 :(得分:2)

MATLAB中的函数调用(仍然)很昂贵。这是强烈建议使用向量化和伪向量化的原因之一:在一个函数调用中处理整个N值数组比为每个元素调用处理函数N次要好一些,因此保存N-1补充呼叫开销。

那么,你能做什么?以下是一些非互斥的选择:

  1. 首先描述您的代码。仅仅因为某些东西看起来像执行时间灾难的主要元凶,它不一定是它。在命令窗口中键入profview,选择要运行的脚本,并查看代码的热点位置。选择优化这些热点而不是您的初步猜测。

  2. 尝试更快的功能。 sprintf通常快速灵活:

    Table = sprintf('%04X\n', Data);
    

    (并且 - 如果您使用edit dec2hex深入了解功能代码 - 您会发现dec2hex实际上会调用sprintf}。

  3. 减少函数调用次数。假设您必须为不同长度的100个数据集构建表,这些数据集存储在单元格数组中:

    DataSet = cell(1,100);
    for k = 1:100
            DataSet{k} = fix(1000*rand(k,1));
    end;
    

    我们的想法是将所有数字组合在一次转换的单个数组中:

    Table = dec2hex(vertcat(DataSet{:}));
    

    请注意,这是以牺牲使用补充内存来组装部分输入为代价的 - 这样做并不总是方便。

  4. 上面的所有变种。好的,这一点实际上不是一个重点。 : - )