【发布时间】:2015-04-26 16:44:38
【问题描述】:
我在 MATLAB 中有以下代码
[Mx,Nx] = size(x);
[My,Ny] = size(y);
padded_x = zeros(Mx+2*(My-1),Nx+2*(Ny-1));
padded_x(My:Mx+My-1,Ny:Ny+Nx-1) = x;
y = rot90(y,2);
z = zeros(Mx+My-1,Nx+Ny-1);
for i=1:Mx+My-1
for j=1:Nx+Ny-1
z(i,j) = sum(sum(padded_x(i:i+My-1,j:j+Ny-1).*y));
end
end
这是 2D 卷积实现的一部分。有什么办法可以让这变得更快吗?例如向量化这 2 个 for 循环? 我知道有更快的算法可以计算 2D 卷积,但我想加快这一速度。因此,我不是在寻找具有不同复杂度的算法,而只是在寻找具有较低复杂度常数的算法。我也想把它保存在 MATLAB 中,而不是使用 MEX - 文件等。最后,提供的 conv2 函数也不是我正在寻找的解决方案。
【问题讨论】:
-
并且您不想使用提供的
conv2函数? -
不,抱歉我忘了提!其实conv2使用的是FFT,所以我认为很明显它属于“不同算法”类别
-
@Controller 我不知道
conv2使用了fft。找到这方面的信息也不是很容易。但是,有没有关系? -
@patrik 好吧,是的,在这种情况下确实如此,因为它会导致不同的复杂性。这个概念是看这两种算法(mine 和 conv2)如何随着输入的大小而扩展。我只是想知道是否可以更快地实现我的算法,以便更好地近似两种算法之间的差异。
-
x和y的典型数据大小是多少?
标签: performance matlab convolution