matlab"arrayfun"函数

zha*_*nwu 1 matlab

考虑以下函数,它将灰度图像(2D矩阵)作为输入:

function r = fun1(img)
r = sum(sum(img));
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用arrayfun处理一系列图像(3d矩阵),因此不需要for循环:

arrayfun(@fun1, imgStack);
Run Code Online (Sandbox Code Playgroud)

但是arrayfun试图将每个元素imgStack视为输入fun1,前一个操作的结果也是一个3D矩阵.我怎么能arrayfun知道我只想fun1在第三维上重复imgStack

另一个问题是,并行arrayfun调用fun1吗?

Edr*_*ric 5

在这种情况下,您不需要arrayfun来执行计算,您可以这样做:

imgStack = rand( 10, 10, 4 ); % 4 10x10 images
r = sum( sum( imgStack, 1 ), 2 ); % sum along both dimensions 1 and 2
Run Code Online (Sandbox Code Playgroud)

通常,许多MATLAB操作将同时对整个阵列进行操作,这是避免循环的常用方法.

MATLAB的正常" arrayfun "不是并行的.但是,对于GPUArrays(使用Parallel Computing Toolbox),有一个arrayfun的并行版本.