为什么复制复杂数据需要花费更多时间

时间:2018-03-16 16:15:40

标签: matlab time-complexity complex-numbers

我对将数据复制到另一个数组的处理时间有疑问。我注意到复制单个数据与普通单个数据相比需要花费更多的时间。即使我预先分配两个数组。

% 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

这大约是慢两倍!?

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

1 个答案:

答案 0 :(得分:3)

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

使用real(double)real(single)时会出现相同的2倍差异,因为顾名思义,doublesingle变量的两倍。< / p>

时间差异不是两倍,因为tic/toc函数有一些开销,初始复制步骤等。

就像注意一样,使用i作为循环变量是generally already frowned upon,当你使用复杂循环时更糟糕。只需使用iikidx或其他内容作为循环变量,而不是i,尤其是在使用复数时