gpt4 book ai didi

matlab - 批量/并行进行一维卷积

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:06 29 4
gpt4 key购买 nike

我有以下代码,基本上是在二维矩阵的每一行上进行一维卷积。卷积核是一样的。所以真的是 SIMD 案例。

a = [   1,2,3,4,5;
6,7,8,9,7;
7,6,2,3,4;
23, 54, 1, 3 ,7];

f = [1,2,3];


for n = 1:size(a,1)
conv(a(n,:),f,'same')
end

当矩阵大小(和内核大小)变大时,速度确实成为一个问题。我想知道是否有任何方法可以批量处理(并行化此过程)?

我做了类似的事情,但结果与上面的代码不同:

a = [   1,2,3,4,5;
6,7,8,9,7;
7,6,2,3,4;
23, 54, 1, 3 ,7];

f = [1,2,3];

ff = repmat(f, [size(a,1) 1]);

for n = 1:size(a,1)
conv(a(n,:),f,'same')
end

convn(a,ff,'same')

conv2(f,2,a,'same')

请指教。谢谢。

附言:我目前只寻求使用卷积的解决方案,而不是使用等效的 fft。

最佳答案

您需要使用二维卷积:

conv2(1, f, a, 'same')

conv2(a, f, 'same')

在第一种方法中,第一个参数是1,因为它是一个列式卷积,根据你所说的,你只想做行卷积,这是使用第二个参数,f

来自 conv2 的 Matlab 文档:

C = conv2(H1, H2, A) first convolves each column of A with the vector H1 and then convolves each row of the result with the vector H2.

沿列卷积标量 1 是恒等运算,允许 f 向量沿原始矩阵行进行卷积,这是期望的结果。

对于上面的第二种方法,这是两个输入矩阵的直接二维卷积,因此如果您注意理解输入维度和参数顺序,这实际上会执行更快的操作。

关于matlab - 批量/并行进行一维卷积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51950709/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com