例如,在回归问题中,您可能希望将包含数据的两个向量之间差异的平方相加。如果我们有以下几种方法,我可以这样做:
x = [3 4 5 6];
y = [2 4 6 3];
我可以写:
sum((x-y).^2)
或:
(x-y)*(x-y)'
这两个都返回相同的值,11。这只是一个可以用任何一种方式进行计算的例子,但我想知道是否有理由选择这种或那种方式,如果有不同的话适合选择一种方式而不是另一种方式的任务类型。
答案 0 :(得分:1)
第一个变体可以扩展为一次处理多组输入数据:
x = [3 4 5 6;1 2 3 4];
y = [2 4 6 3;4 3 2 1];
sum((x-y).^2,2)
特别是在处理许多小型数据时,这可能是一个显着的加速。对于许多函数(例如sum
),您可以看到函数内置函数具有dim
参数,该参数允许选择应在其上执行操作的维度。这是一种更通用的方法,可以提高可重用性。在这种情况下,允许选择维度是微不足道的
yourfun(x,y,dim)=sum((x-y).^2,dim)
答案 1 :(得分:0)
那么Matlab中sum(x.^2)
向量的x*x'
和1xN
之间有什么区别?
令人惊讶的是有一个。在乘法情况下,执行速度快了五倍。
x = rand(1, 1e6);
tic;
for i = 1:1e2
x * x';
end;
toc;
tic;
for i = 1:1e2
sum(x.^2);
end;
toc;
在2012b上给出:
Elapsed time is 0.057315 seconds.
Elapsed time is 0.289310 seconds.