![](/img/trans.png)
[英]How to efficiently create a 3D array from 2D arrays in python using numpy in a loop?
[英]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
并将结果串联起来?
如果您只想看看如何使用一些函数,可以使用以下方法将arrayfun
, cell2mat
和reshape
结合起来(我根据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.