是否可以使用pagefun
同时在多个页面上计算规范(并执行其他内置GPU函数 - http://www.mathworks.co.uk/help/distcomp/run-built-in-functions-on-a-gpu.html)?
例如,我需要计算3D数组的规范。
N = 10000
Sig = gpuArray(2,2000,N) % This is just to get an idea of the dimensions. Its populated elsewhere
% This is what I am currently doing.
for k = 1:N
TNorm(k,:) = [norm(Sig(1,:,k),2) norm(Sig(2,:,k),2)];
end
有没有办法一次性执行它而不是遍历第三维来每次计算规范?可以这样做吗?
pagefun(norm(Sig,2)) % This gives the error: Input data must be a double or single vector or 2D matrix.
提前致谢! :)
答案 0 :(得分:0)
假设你有一个3D数组,在你的情况下我们称之为E:
E = rand(3,3,4)%这是一个尺寸为3x3x4
的3D数组如果你想在这种情况下从1到4计算页面的范数,你可以使用:
norm_E = arrayfun(@(idx) norm(E(:,:,idx)), 1:size(E,3))
输出将是:
norm_E = [(norm array 1),(norm array 2),(norm array 3),(norm array 4)]
你也不仅限于2-norm,你可以使用任何你喜欢的规范,例如,如果你想使用你可以使用的无穷大规范:
norm_E = arrayfun(@(idx) norm(E(:,:,idx),inf), 1:size(E,3))
使用arrayfun比for循环更快。如果你被限制使用pagefun,我很抱歉我的matlab版本没有这个功能。