我在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
我的代码将使用此类数据。
答案 0 :(得分:2)
MATLAB中的函数调用(仍然)很昂贵。这是强烈建议使用向量化和伪向量化的原因之一:在一个函数调用中处理整个N
值数组比为每个元素调用处理函数N
次要好一些,因此保存N-1
补充呼叫开销。
那么,你能做什么?以下是一些非互斥的选择:
首先描述您的代码。仅仅因为某些东西看起来像执行时间灾难的主要元凶,它不一定是它。在命令窗口中键入profview
,选择要运行的脚本,并查看代码的热点位置。选择优化这些热点而不是您的初步猜测。
尝试更快的功能。 sprintf
通常快速灵活:
Table = sprintf('%04X\n', Data);
(并且 - 如果您使用edit dec2hex
深入了解功能代码 - 您会发现dec2hex
实际上会调用sprintf
}。
减少函数调用次数。假设您必须为不同长度的100个数据集构建表,这些数据集存储在单元格数组中:
DataSet = cell(1,100);
for k = 1:100
DataSet{k} = fix(1000*rand(k,1));
end;
我们的想法是将所有数字组合在一次转换的单个数组中:
Table = dec2hex(vertcat(DataSet{:}));
请注意,这是以牺牲使用补充内存来组装部分输入为代价的 - 这样做并不总是方便。
上面的所有变种。好的,这一点实际上不是一个重点。 : - )