【问题标题】:Averaging Matlab matrix平均 Matlab 矩阵
【发布时间】: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


【解决方案1】:

恐怕我无法回答您正在使用的功能的内部工作原理。但是,由于它们看起来过于复杂,我觉得我应该让您了解一种更简单(而且更快)的平均方法。

您可以改为使用带有 [0.5;0.5] 内核的 conv2。我在下面扩展了您的代码:

function [A, T1, T2 T3] = speed()
%Speed test for averaging a matrix
n = 900;
A = rand(n,n);
tic
for i=1:100
    T1 = avg(A);
end
toc

tic
for i=1:100
 T2 = avg2(A);
end
toc

tic
for i=1:100
   T3 = conv2(A,[1;1]/2,'valid'); 
end
toc

if sum(sum(abs(T3-T2))) > 0
    warning('Method 3 not equal the other methods')
end
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

结果:

经过的时间是 10.201399 秒。

经过的时间是 1.088003 秒。

经过的时间是 1.040471 秒。

如果您已经知道这一点,我们深表歉意。

【讨论】:

  • 我不知道这个功能,非常感谢!它似乎两全其美,大矩阵的速度与 avg2 相同,小矩阵的速度也快。
猜你喜欢
  • 1970-01-01
  • 2018-12-02
  • 2013-09-23
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
相关资源
最近更新 更多