在MATLAB中是否可以从不使用循环返回2D数组的函数创建3D数组?

时间:2014-12-16 12:26:55

标签: arrays matlab for-loop dictionary

我有一个MATLAB函数f(w),它返回一个(n x n)方阵。我有一个向量ws = [w_1, w_2, ... w_m],其中包含m个参数w_i。我想创建一个包含m" plane" f(w_i)。是否可以在MATLAB中使用arrayfun() et al.创建此3D数组而不使用for循环来迭代参数向量ws并连接结果?

1 个答案:

答案 0 :(得分:2)

如果您只是想了解如何使用一些功能,可以采用arrayfuncell2matreshape组合的方法(我更改了最后一行)根据丹尼尔的评论):

f = @(w) [w 2*w; 3*w 4*w];   %// Random function that returns an array of fixed size
w = 1:4;   %// Random input to function
out = cell2mat(reshape(arrayfun(@(x) f(w(x)), w, 'UniformOutput', 0),1,1,[]));

您也可以这样做(可能是这些方法中最快的,但可能更快的方法):

out = f(reshape(w,1,1,[])) 

或者使用这样的循环(注意循环的顺序):

for ii = numel(w):-1:1
   out(:,:,ii) = f(w(ii));  %// No pre-allocation necessary
end

或者更传统的循环方法:

out = zeros(2,2,4);   %// Pre-allocation necessary
for ii = 1:numel(w)
   out(:,:,ii) = f(w(ii));
end

我可以继续,但我认为你在这里看到了一些......