为什么复制复杂数据需要更多时间
Why does it take much more time to copy complex data
我对将数据复制到另一个数组的处理时间有疑问。我注意到与普通的单一值相比,复制复杂的单一数据需要更多的时间。即使我预先分配了两个数组。
% 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
大约慢了两倍!?
我不理解这种行为。在我编写的获取实时数据的程序中,我需要将复杂数据复制到一个新数组中,但处理速度很慢。结果我的程序无法实时运行。
复数定义为 a+bi
,而不是实数 a
。这意味着对于每个复数 存储两个 实数。因此,当复制大小为 x
的数组时,包含复数的数组所花费的时间是实数数组的两倍。
使用 real(double)
和 real(single)
时会出现相同的 2 倍差异,因为 double
顾名思义,是 single
变量大小的两倍.
在时间上不完全相差两倍,因为 tic/toc
函数、初始复制步骤等有一些开销。
请注意,使用 i
作为循环变量是 generally already frowned upon,当您使用复杂循环时情况更糟。只需使用 ii
或 k
或 idx
或其他东西作为循环变量,而不是 i
、,尤其是在使用复数时 .
我对将数据复制到另一个数组的处理时间有疑问。我注意到与普通的单一值相比,复制复杂的单一数据需要更多的时间。即使我预先分配了两个数组。
% 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
大约慢了两倍!?
我不理解这种行为。在我编写的获取实时数据的程序中,我需要将复杂数据复制到一个新数组中,但处理速度很慢。结果我的程序无法实时运行。
复数定义为 a+bi
,而不是实数 a
。这意味着对于每个复数 存储两个 实数。因此,当复制大小为 x
的数组时,包含复数的数组所花费的时间是实数数组的两倍。
使用 real(double)
和 real(single)
时会出现相同的 2 倍差异,因为 double
顾名思义,是 single
变量大小的两倍.
在时间上不完全相差两倍,因为 tic/toc
函数、初始复制步骤等有一些开销。
请注意,使用 i
作为循环变量是 generally already frowned upon,当您使用复杂循环时情况更糟。只需使用 ii
或 k
或 idx
或其他东西作为循环变量,而不是 i
、,尤其是在使用复数时 .