我在MATLAB中有一个三维矩阵卷积的for循环,我想用它替换它
arrayfun
所以它会在GPU上并行运行。
我也觉得有一种方法可以完全摆脱这里的循环,但不确定如何:)
这是我的代码,有什么建议吗?感谢。
for i=1:size(obj.W, 3)
d(:, :, :, i) = convn(prev_delta(:, :, :, i), ...
flipped_W(:, :, i), 'full');
end
答案 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。
的返回值