Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab中同时涉及单、双矩阵时的内存和速度问题_Matlab_Casting - Fatal编程技术网

Matlab中同时涉及单、双矩阵时的内存和速度问题

Matlab中同时涉及单、双矩阵时的内存和速度问题,matlab,casting,Matlab,Casting,如果A是n乘n的双矩阵,B是n乘n的单矩阵(n很大),我们需要计算A*B。我知道得到的矩阵是单矩阵的类型。我担心的是 1) Matlab是否会隐式地创建一个临时的单一矩阵来存储a的值?或者,这种混合类型的计算会占用更大的内存吗 2) 这种混合型计算比同型计算慢吗?或者,这种混合类型的计算会降低程序的速度吗 我们是否应该尝试显式地使用homo类型数据进行计算?我相信如果我们知道Matlab是如何工作的,我们可以更准确地预测代码的行为。这一定很有帮助。我同意Ander的观点,并继续计时,以验证关于偏

如果A是n乘n的双矩阵,B是n乘n的单矩阵(n很大),我们需要计算A*B。我知道得到的矩阵是单矩阵的类型。我担心的是

1) Matlab是否会隐式地创建一个临时的单一矩阵来存储a的值?或者,这种混合类型的计算会占用更大的内存吗

2) 这种混合型计算比同型计算慢吗?或者,这种混合类型的计算会降低程序的速度吗


我们是否应该尝试显式地使用homo类型数据进行计算?我相信如果我们知道Matlab是如何工作的,我们可以更准确地预测代码的行为。这一定很有帮助。

我同意Ander的观点,并继续计时,以验证关于偏好(单精度或双精度)的任何主张。以下是两种方法的基准测试示例:

   N = 1e3;
   A1 = single(rand(N,N));
   A2 = double(rand(N,N));
   B = double(rand(N,N));
现在我们可以开始计时这两种方法。我通常重复多次相同的计算(这里我重复100次):


因此,当A是单精度(A1)时,它的速度是单精度(A1)的两倍

你可以试着计时。@AnderBiguri是的,我能做到。但我的测试必须是特殊的,并且有很多限制。我问这个问题的原因是我想知道是否有人知道Matlab的内部机制。如果我们知道Matlab是如何工作的,它会更加准确和有用。如果我们没有其他选择,我会说是的。但我仍然更愿意知道准确预测代码行为的内部机制:-(我以前做过其他问题的测试,测试结果确实时不时变化很大。
    tic; for ii = 1: 100 ; C1 = A1 * B; end; toc % mixed single and double
    Elapsed time is 0.600353 seconds.
    tic; for ii = 1: 100 ; C2 = A2 * B; end; toc % both doubles
    Elapsed time is 1.500283 seconds.