【发布时间】:2011-10-21 11:08:27
【问题描述】:
在我使用的 Matlab 程序中,我经常需要在矩阵内求平均(插值)。最直接的方法是添加矩阵和一个移位的(平均)。但是,您可以使用矩阵乘法 (avg2) 执行相同的操作。我注意到在大型矩阵的情况下使用矩阵乘法的情况下速度显着提高。
谁能解释为什么 Matlab 能够比添加相同的矩阵更快地处理这种乘法?另外,相对于 avg() 使用 avg2() 可能存在哪些缺点?
对于这种情况 (n=500),运行时差异是一个因素 ~6。
function [] = speed()
%Speed test for averaging a matrix
n = 500;
A = rand(n,n);
tic
for i=1:100
avg(A);
end
toc
tic
for i=1:100
avg2(A);
end
toc
end
function B = avg(A,k)
if nargin<2, k = 1; end
if size(A,1)==1, A = A'; end
if k<2, B = (A(2:end,:)+A(1:end-1,:))/2; else B = avg(A,k-1); end
if size(A,2)==1, B = B'; end
end
function B = avg2(A,k)
if nargin<2, k = 1; end
if size(A,1)==1, A = A'; end
if k<2,
m = size(A,1);
e = ones(m,1);
S = spdiags(e*[1 1],-1:0,m,m-1)'/2;
B = S*A; else B = avg2(A,k-1); end
if size(A,2)==1, B = B'; end
end
【问题讨论】:
-
interp2你在找什么吗?
标签: performance matlab matrix