关于将数据复制到另一个数组的处理时间,我有一个问题。我注意到,与普通的单个值相比,复制复杂的单个数据需要花费更多的时间。即使我预先分配了两个数组。
% 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
哪种近似速度慢了两倍!?
我不明白这种行为。在我编写的获取实时数据的程序中,我需要将复杂的数据复制到一个新的数组中,但是处理速度是缓慢的。因此,我的程序无法实时运行。
发布于 2018-03-16 08:21:42
复数被定义为a+bi
,而不是实数a
。这意味着,对于每一个复数,两个实数都会被存储。因此,当复制一个大小为x
的数组时,包含复数的数组所需的时间是实数的两倍。
在使用real(double)
和real(single)
时,也会出现同样的2倍差异,顾名思义,double
是single
变量大小的两倍。
时间上的差异并不是两倍,因为tic/toc
函数、初始复制步骤等都有一些开销。
注意,使用i
作为循环变量是generally already frowned upon,如果使用复杂的循环,情况就更糟了。只需使用ii
、k
或idx
或其他东西作为循环变量,而不是使用i
、,特别是在使用复数时。
https://stackoverflow.com/questions/49325255
复制