【问题标题】:Alternative to dec2hex in MATLAB?在 MATLAB 中替代 dec2hex?
【发布时间】:2015-02-19 09:38:29
【问题描述】:

我在 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

我的代码将使用这种数据。

【问题讨论】:

  • 您要转换的数字有多大?您的 MATLAB 版本是多少?
  • 您是否尝试过使用向量一次性传递要转换的值? dec2hex(1:100000) 很快!
  • 在我的机器上将 500,000 个数字转换为十六进制(并行)确实需要 0.22 秒,因此这不太可能是您的计算需要数小时的原因。
  • @SNC:那么请告诉我们您的数据是什么!我们怎么知道?
  • 你确定问题是dec2hex...我问是因为在示例中Data 不是preallocated。我认为这是原因

标签: matlab hex decimal


【解决方案1】:

在 MATLAB 中函数调用(仍然)很昂贵。这是强烈推荐使用向量化和伪向量化的原因之一:在一个函数调用中处理整个N 值数组比为每个元素调用处理函数N 次要好得多,从而节省了@987654323 @补充调用开销。

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

  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. 以上所有变体。好吧,这点实际上不是一个点。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多