我有一组拟合对象,我需要用几个值来评估每个对象。因为有超过数千个这些合适的对象,我发现循环它们并用值来评估它们非常慢。那么有没有办法使用某种矢量化解决方案?
例如,我可以通过
评估单个适合对象fitArray{1,1}(400)
但我想做的是一次评估多个拟合对象,如下所示:
fitArray{1:1000}(400)
Matlab中的循环总是非常慢,在这种情况下它很慢,因为我需要用多个值来评估每个拟合。
那么有没有办法在没有循环的情况下做到这一点?
答案 0 :(得分:0)
循环不是这里最大的问题,例如在装配速度上看......内存分配很糟糕,所以尝试在循环本身之前做所有操作(fitoptions,fittype等......)。如果你使用多项式拟合而你不需要cfit结构,那么尝试使用polyfit - 应该相当快。
答案 1 :(得分:0)
我自己找到了答案。毕竟这很简单。我通过这样做达到了我想要的结果:
vals = repmat({values}, size(fitArray));
evals = cellfun(@feval, fitArray, vals);
这将使用vals数组中相应行中的值来计算单元数组中的每个拟合对象。因此,结果是evals数组只包含每个拟合对象的结果。