我在matlab中有一个函数返回一个大小为m x n
的矩阵。我想将此矩阵的每个单独元素存储到维度为m x n x p x 2
的单元格的各个元素中。这里m,n,p
都是大数,因此我需要一个没有循环的解决方案。
换句话说,我需要一行代码来实现以下循环:
for k = 1:p
out = func(parameters(k)) %out is mxn matrix
for i = 1:m
for j = 1:n
cell{i,j,k,1} = out(i,j)
end
end
end
答案 0 :(得分:1)
我不清楚你x 2
输出中m x n x p x 2
来自哪里,但您可以尝试以下内容:
p = 10; n = 15; m = 20;
result = arrayfun(@(x) num2cell( func(x) ), 1:p, 'uni',0);
output = reshape([result{:}],n,m,p);
或:
result = arrayfun(@(x) func(x), 1:p,'uni',0);
output = num2cell(reshape([result{:}],n,m,p));
输出为15 x 20 x 10 x 1
单元格。其中每个单元格元素都包含一个带有一个数值的“数组”。
如果你坚持,古怪的单行:
output = num2cell(reshape(cell2mat(arrayfun(@(x) func(x),1:p,'uni',0)), n,m,p) );