多次元配列に対するPolyfitの高速化

私は測定水準x, 測定値yに対し y=a0 + a1*x + a2*x^2 の形でカーブフィッティングを行いたいと考えています。
例えばxの次元は100万×3, yの次元は100万×3であり、1行1行について上記カーブフィッティングを行いたいです。
arrayfunを用いて下記のような関数を作成すると計算は可能でしたが実行速度が大変遅いです。
実行速度を改善するために、よりよい実装方法はないでしょうか。
function coefs = multiPolyfit(x,y,dim)
%%%%%%%%%%%%%%%%%%%%%%%
% x: array型。サンプルを行方向、列方向は水準。
% y: array型。サンプルを行方向、列方向は水準。
% dim: int型
%%%%%%%%%%%%%%%%%%%%%%%
s = table2struct(table(x,y,'VariableNames',{'x','y'}));
coefs = arrayfun(@(z) polyfit(z.x,z.y,dim),s,'UniformOutput',false);
end

 採用された回答

Kazuya
Kazuya 2019 年 9 月 4 日

0 投票

こちらに同じ質問が見つかりました。Matt Tearle さんの回答で10倍くらいは速くなりそうです。

1 件のコメント

Kouta Amano
Kouta Amano 2019 年 9 月 4 日
ありがとうございます。
自分のもとの実装に比べて50倍速くなりました・・・。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchange近似の後処理 についてさらに検索

製品

タグ

質問済み:

2019 年 9 月 3 日

コメント済み:

2019 年 9 月 4 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!