【问题标题】:Why does it take much more time to copy complex data为什么复制复杂数据需要更多时间
【发布时间】:2018-03-17 00:29:02
【问题描述】:

我有一个关于将数据复制到另一个数组的处理时间的问题。我注意到与普通的单个值相比,复制复杂的单个数据需要更多的时间。即使我预先分配了两个数组。

% Example to show different processing speed of copying data 
T1=0; % total time for single 
T2=0; % total time for complex single 
% preallocate rrays
Csingle = single(zeros(500,3000));
Cimagsingle =complex(Csingle);
for i=1:1000;
    A =rand(500,3000,'single');
    B = 1i.*A;
    tic ;
    C = A;
    t1=toc;
    T1=T1+t1;
    tic;
    Cimag = B;
    t2=toc ;
    T2=T2+t2;
end

本例中的处理时间为

T1 = 0.6105

T2 = 1.1430

这大约是慢两倍!?

我不理解这种行为。在我正在编写以获取实时数据的程序中,我需要将复杂数据复制到一个新数组中,但处理速度很慢。结果我的程序无法实时运行。

【问题讨论】:

  • 您的意思是,对于定义为具有 2 个分量 (a+bi) 的数字,填充时间是定义为 1 个分量 (a) 的数字的两倍。嗯嗯不知道为什么这会让你感到惊讶。它实际上是数据量的两倍。

标签: matlab time-complexity complex-numbers


【解决方案1】:

复数定义为a+bi,而不是实数a。这意味着对于每个复数 两个 实数被存储。因此,当复制大小为x 的数组时,包含复数的数组所花费的时间是实数的两倍。

当使用 real(double)real(single) 时,同样会出现 2 倍的差异,因为 double 顾名思义,是 single 变量大小的两倍。

时间上的差异并不完全是两倍,因为 tic/toc 函数、初始复制步骤等存在一些开销。


请注意,使用i 作为循环变量是generally already frowned upon,当您使用复杂循环时,情况会更糟。只需使用iikidx 或作为循环变量的东西,而不是i尤其是在使用复数时

【讨论】:

    猜你喜欢
    • 2015-10-03
    • 2023-04-08
    • 2013-04-12
    • 2018-01-14
    • 2019-09-15
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2016-09-03
    相关资源
    最近更新 更多