假设我们有一个三维数组(张量),我们想在每个切片中应用一个函数,例如myFun = @(x)mean(x)
。如果没有for
循环使用内置函数(可能使用bsxfun
,arrayfun
或accumarray
),有没有办法做到这一点?
For循环示例:
inputA = rand(10,5,20);
for sl = 1:size(A,3)
inputB = myFun(inputA(:,:,sl));
end
谢谢。
修改
inputB = arrayfun(@(iterSlice) myFun(inputA(:,:,iterSlice), 1:size(inputA,3))
PS:我想提一下,应用的处理函数在每个切片中都比较复杂,mean
是处理函数中包含的一个例子。功能
答案 0 :(得分:0)
for循环已经是迭代的最佳可能性。进一步提高性能的唯一方法是摆脱迭代,并进行myFun
的单个函数调用,以矢量化方式处理所有数据。对于你的示例函数非常简单:
myFun=@(x)permute(mean(x,1),[3,2,1])
现在它接受3d输入,并在行中找到上一个迭代代码的结果。你必须修改你的功能,顶部没有可以为你做这件事的通用包装。
关于您的修改:arrayfun
为known to be slow