繁体   English   中英

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

[英]Is it possible in MATLAB to create a 3D array from a function which returns 2D arrays without using a loop?

我有一个MATLAB函数f(w)返回一个(nxn)方阵。 我有一个向量ws = [w_1, w_2, ... w_m] ,其中包含m参数w_i 我想创建一个包含m “平面” f(w_i)的3D数组。 在MATLAB中可以使用arrayfun() et al. 创建此3D数组而无需使用for循环来遍历参数向量ws并将结果串联起来?

如果您只想看看如何使用一些函数,可以使用以下方法将arrayfuncell2matreshape结合起来(我根据Daniel的评论更改了最后一行):

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

我可以继续,但是我想您可以在这里看看一些...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM