我有一个fit对象数组,我需要用几个值来计算每个对象。因为有超过数千个这样的fit对象,所以我发现循环遍历它们并使用值评估它们是非常慢的。那么有没有一种方法可以使用某种矢量化的解决方案呢?
例如,我可以通过以下方法评估单个fit对象
fitArray{1,1}(400)但我想要做的是一次评估多个fit对象,如下所示:
fitArray{1:1000}(400)Matlab中的循环总是非常慢,在这种情况下,它真的很慢,因为我需要用多个值来计算每个拟合。
那么有没有一种不用循环就能做到的方法呢?
发布于 2013-02-15 19:29:06
我自己找到了答案。毕竟这很简单。通过这样做,我得到了我想要的结果:
vals = repmat({values}, size(fitArray));
evals = cellfun(@feval, fitArray, vals);这将用单元数组中相应行中的值计算单元数组中的每个拟合对象。因此,结果是evals数组只包含每个fit对象的结果。
发布于 2013-02-15 03:08:25
循环在这里不是最大的问题,看看not选项的速度……内存分配很糟糕,所以尝试在循环本身之前执行所有操作(fitoptions、fittype等)。如果你使用多项式拟合,并且你不需要cfit结构,那么尝试多项式拟合--应该会快得多。
https://stackoverflow.com/questions/14874412
复制相似问题