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
Matlab中conv2的替代方案_Matlab - Fatal编程技术网

Matlab中conv2的替代方案

Matlab中conv2的替代方案,matlab,Matlab,我正在玩Matlab,尝试各种不同的东西,并找到不用内置函数就能实现的方法。 显然,Matlab(根据谷歌及其网站)没有发布“conv2”函数的源代码 是否有“conv2(h1,h2,A)”的替代功能,或者是否有一种不使用Matlabsconv2而编写自己版本的代码的方法 Matlab中的help选项/关键字并没有真正帮助我 ----编辑---- 这是作为conv2(A,B)替代的代码。但是我正在寻找类似的东西来处理conv2(h1,h2,A) 我完全同意Jonas的观点,但我会让您参考FEX的

我正在玩Matlab,尝试各种不同的东西,并找到不用内置函数就能实现的方法。 显然,Matlab(根据谷歌及其网站)没有发布“conv2”函数的源代码

是否有“conv2(h1,h2,A)”的替代功能,或者是否有一种不使用Matlabs
conv2
而编写自己版本的代码的方法

Matlab中的
help
选项/关键字并没有真正帮助我

----编辑----

这是作为
conv2(A,B)
替代的代码。但是我正在寻找类似的东西来处理
conv2(h1,h2,A)


我完全同意Jonas的观点,但我会让您参考FEX的另一个选项:2D conv使用
svd
,以便在某些情况下更快(您需要从代码中挖掘出来)。

以下是一些在不使用
conv2
的情况下进行卷积的想法

  • 使用
    im2col
    将滑动窗口转换为列,然后在每列上并行执行卷积

  • 使用傅里叶变换:
    ifft(fft(A)。*fft(B))
    -您必须先填充内核


  • 我真的不理解这里的问题——你认为什么是“酷的方式”?无论如何,代码不可用的原因是它已经被编译过了,所以运行速度要快得多。如果您对源代码感兴趣,请查看开源Ocave中的卷积函数。另一方面,内置函数的存在是您首先使用Matlab的原因;如果你喜欢自己写所有东西,你可以在C++(或者java或Python)中工作得更好。我是自学的,我不认为通过内置函数来实现很多学习。我只是想看看其他人是否已经开始使用内置函数了。在这个阶段,速度不是问题,这很公平。无论如何,仍然很难看出您真正想要的答案是什么-一种不使用
    conv2
    的卷积方法?什么能让答案“酷”?哈哈,是的。请原谅我的术语。这将被认为是很酷的。了解
    conv2
    的功能并制定自己的算法。你也没有通过询问SO来学到那么多代码。
        function B = convolve(A, k);
        [r c] = size(A);
        [m n] = size(k);
        h = rot90(k, 2);
        center = floor((size(h)+1)/2);
        left = center(2) - 1;
        right = n - center(2);
        top = center(1) - 1;
        bottom = m - center(1);
        Rep = zeros(r + top + bottom, c + left + right);
        for x = 1 + top : r + top
            for y = 1 + left : c + left
                Rep(x,y) = A(x - top, y - left);
            end
        end
        B = zeros(r , c);
        for x = 1 : r
            for y = 1 : c
                for i = 1 : m
                    for j = 1 : n
                        q = x - 1;
                        w = y -1;
                        B(x, y) = B(x, y) + (Rep(i + q, j + w) * h(i, j));
                    end
                end
            end
        end