我有一个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
并连接结果?
答案 0 :(得分:2)
如果您只是想了解如何使用一些功能,可以采用arrayfun
,cell2mat
和reshape
组合的方法(我更改了最后一行)根据丹尼尔的评论):
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
我可以继续,但我认为你在这里看到了一些......