如何用arrayfun替换loop-for of convolutions?

时间:2014-01-05 15:32:04

标签: matlab gpgpu

我在MATLAB中有一个三维矩阵卷积的for循环,我想用它替换它 arrayfun所以它会在GPU上并行运行。

我也觉得有一种方法可以完全摆脱这里的循环,但不确定如何:)

这是我的代码,有什么建议吗?感谢。

for i=1:size(obj.W, 3)
   d(:, :, :, i) = convn(prev_delta(:, :, :, i), ...
       flipped_W(:, :, i), 'full');
end

1 个答案:

答案 0 :(得分:0)

将输入数组转换为struct array并应用arrayfun

是否有帮助?

我没有测试代码,你可以尝试一下。

c = cell(size(obj.W, 3), 2);
p = prev_delta;
cell_p = squeeze(mat2cell(size(p,1),size(p,2),size(p,3),ones(1,size(p,4))));
w = flipped_W;
cell_w = squeeze(mat2cell(size(w,1), size(w,2),ones(1,size(w,3))));

c(:,1) = cell_p;
c(:,2) = cell_w;

names = {'p','w'};

s = cell2struct(c, names, 2);

d = arrayfun(@(x)(covn(x.p, x.w, 'full'), s);

您应该注意d。

的返回值