考虑以下函数,它将灰度图像(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吗?
在这种情况下,您不需要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的并行版本.
| 归档时间: |
|
| 查看次数: |
6075 次 |
| 最近记录: |