在每个张量切片中应用函数

时间:2016-03-11 13:17:01

标签: matlab

假设我们有一个三维数组(张量),我们想在每个切片中应用一个函数,例如myFun = @(x)mean(x)。如果没有for循环使用内置函数(可能使用bsxfunarrayfunaccumarray),有没有办法做到这一点?

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是处理函数中包含的一个例子。功能

1 个答案:

答案 0 :(得分:0)

for循环已经是迭代的最佳可能性。进一步提高性能的唯一方法是摆脱迭代,并进行myFun的单个函数调用,以矢量化方式处理所有数据。对于你的示例函数非常简单:

myFun=@(x)permute(mean(x,1),[3,2,1])

现在它接受3d输入,并在行中找到上一个迭代代码的结果。你必须修改你的功能,顶部没有可以为你做这件事的通用包装。

关于您的修改:arrayfunknown to be slow