我必须对参数分析中的数据进行后处理,该分析将输出作为输出的1D阵列.我想将这个一维数组重新整形为一个多维矩阵,它具有我调查参数的维数(按正确的顺序排列),这些维度的数量可能不同.
我可以想出一个基于for循环的函数,但问题是,对于非常大的数组,我用完了RAM.我完全清楚这不是最聪明的方法.我想知道是否有一种更聪明的方法可以操作如此大的数组并完成与我的函数相同的工作.
function [Tensor, n_dimensions]=reshape_array(Data,ndim)
n_dimensions=length(ndim);
n_elements=prod(ndim);
reshape_string=[];
for i=n_dimensions:-1:1
if i==1
reshape_string=strcat(reshape_string, ' ndim(', num2str(i) , ')])');
elseif i== n_dimensions
reshape_string=strcat(reshape_string, ' [ndim(', num2str(i) , ')');
else
reshape_string=strcat(reshape_string, ' ndim(', num2str(i) , ') ');
end
end
invert_string=[];
for i=1:n_dimensions
if i==1
invert_string=strcat(invert_string, 'ndim(', num2str(i) , '),');
elseif i== n_dimensions
invert_string=strcat(invert_string, ' ndim(', num2str(i) , ')');
else
invert_string=strcat(invert_string, ' ndim(', num2str(i) , '),');
end
end
reshape_statement=strcat('reshape(Data,',reshape_string);
invert_statement=strcat('zeros(',invert_string,');');
Tens1=eval(reshape_statement);
Tens2=eval(invert_statement);
nLoops=length(ndim);
str = '';
str_dim_tens='';
str_dim_indeces='';
for i=1:nLoops
str …Run Code Online (Sandbox Code Playgroud)