Matlab中如何从arrayfun获取结果并输出为2×1000双精度矩阵
解决方法
你可以通过以下两种常用方式实现需求:
方法1:直接转换已生成的cell数组
如果已经运行代码得到了cell数组x1,直接对cell元素做维度拼接即可:
% 方法1.1 沿列方向拼接所有cell内的2×1向量 x_mat = cat(2, x1{:}); % 方法1.2 用cell2mat直接转换,效果和上述写法一致 x_mat = cell2mat(x1);
两种写法都会直接得到2行1000列的双精度矩阵,逻辑是把每个cell存储的2×1最优解按顺序拼在列维度上。
方法2:修改arrayfun参数直接输出数值矩阵
如果还未运行代码,可以直接调整arrayfun的写法,省去生成中间cell数组的步骤:
clear clc a = 1:1000; b = linspace(100,200,1000); % 把fminsearch返回的2×1向量转成1×2行向量,开启UniformOutput直接输出数值数组 x_temp = arrayfun( @(v,w) fminsearch(@(x) (x(1)-v).^2 + (x(2)-w).^2, [1;1]).', a, b, 'UniformOutput', true); % 转置得到2×1000的目标矩阵 x_mat = x_temp.';
这种方式内存占用更低,不需要额外存储1×1000的cell数组,适合数据量更大的场景。
内容的提问来源于stack exchange,提问作者Chang
相关产品推荐
相关产品推荐

