JuliaのB-splineパッケージを比較する
BasicBSpline.jlの野望はJuliaのB-splineパッケージの覇権を取ることですが、他のパッケージとの比較は後回しにしていました。該当issueは#161。
このscrapで比較の記録をまとめていきます
比較項目はとりあえず以下の4つかな
- BasicBSpline.jlに有るが、当該パッケージに無い機能
- BasicBSpline.jlに無いが、当該パッケージに有る機能
- 依存先のパッケージ(少ない方が良い)
- Starの数
BSplines.jl
一番いい名前を取得したパッケージ。
repo: https://github.com/sostock/BSplines.jl
doc: https://sostock.github.io/BSplines.jl/dev/
- BasicBSpline.jlに有るが、当該パッケージに無い機能
- BasicBSpline.jlに無いが、当該パッケージに有る機能
-
interpolate
- BasicBSpline.jlは補間の関数を提供しておらず、必要な人はドキュメントを参照してもらって自分で実装してもらう方針。
-
averagebasis
- https://sostock.github.io/BSplines.jl/dev/functions/ に記載があるが…用途がまだよく理解できていない
-
knotaveages
- https://sostock.github.io/BSplines.jl/dev/functions/ に記載があるが…用途がまだよく理解できていない
-
- 依存先のパッケージ
- LinearAlgebra
- まあ当然、という感じ
- OffsetArrays
- BasicBSpline.jlでは使っていない。Offsetが必要なのってどこだろう?
- RecipesBase
- プロットレシピのためのパッケージ。BasicBSpline.jlでも依存あり
- LinearAlgebra
- Starの数
- 19
BSplineKit.jl
BasicBSpline.jlの対抗馬になりそうなパッケージ。パッケージは基礎的な機能を提供することを主眼にしておらず、応用志向ではある。デザインが綺麗かというと…初見では少し怪しいように思ってしまう(notebookのディレクトリが残っている、polynomial degreeの代わりにorderを使っている、Galerkin関連のメソッドもあり基礎的事項に集中していない、依存パッケージが多い、etc.)
repo: https://github.com/jipolanco/BSplineKit.jl
doc: https://jipolanco.github.io/BSplineKit.jl/dev/
- BasicBSpline.jlに有るが、当該パッケージに無い機能
- PlotRecipesを使ったプロット機能
- テンソル積によるB-spline多様体
- ChainRulesCore.jlによる自動微分のサポート
- Refinementの機能
- BasicBSpline.jlに無いが、当該パッケージに有る機能
- 補間・外挿
- 前述のように、BasicBSpline.jlの関数には無いがドキュメントには記載している
-
Recombination
- Galerkin法の周辺
- https://jipolanco.github.io/BSplineKit.jl/dev/galerkin/
- 「B-splineを扱うための基礎パッケージがあって、応用パッケージはそれに依存する」というのが正しい。なのでBasicBSpline.jlで扱う予定も無い。
- 補間・外挿
- 依存先のパッケージ(少ない方が良い)
- ArrayLayouts
- BandedMatrices
- FastGaussQuadrature
- Gauss求積のためのパッケージ。
- BasicBSpline.jlではv0.8.xまでは依存していたが、v0.9.x以降は依存をやめた。
- LazyArrays
- LinearAlgebra
- Random
- Reexport
- SnoopPrecompile
- SparseArrays
- StaticArrays
- Starの数
- 26
NURBS.jlもあった https://github.com/HoBeZwe/NURBS.jl
JuliaHubでの検索
比較項目に
- 最新バージョン
- 最終更新日
を追加すべし。
最後には表で調査結果をまとめる
Interpolations.jl
以前は
Currently this package's support is best for B-splines and also supports irregular grids.
と書かれていた(README on v0.13.0)が現在では
Currently this package supports B-splines and also irregular grids.
と書かれている(README on v0.14.7)。
幾何形状近似のためのB-splineと補間のためのB-splineとで、微妙に用語が異なる問題がある。私の理解では、Interpolations.jlのB-splineの実装は不十分で、BasicBSpline.jlのような「基礎的なB-spline関数を実装したパッケージ」にInterpolations.jlが依存している方が正しいと思われる。
repo: https://github.com/JuliaMath/Interpolations.jl
doc: http://juliamath.github.io/Interpolations.jl/latest/
- BasicBSpline.jlに有るが、当該パッケージに無い機能
- 非一様ノット列のサポート (たぶんissue#131)
- リファインメント
- 2次元以上のB-spline多様体のサポート
- BasicBSpline.jlに無いが、当該パッケージに有る機能
- 補間
- 依存先のパッケージ(少ない方が良い)
- Adapt
- AxisAlgorithms
- ChainRulesCore
- LinearAlgebra
- OffsetArrays
- Random
- Ratios
- Requires
- SharedArrays
- SparseArrays
- StaticArrays
- WoodburyMatrices
- Starの数
- 417
GPT-4やBIng AIに聞いてみましたが、まともに比較してくれることは無かったです。
パッケージ比較を全部やるのは大変になってきたので、一旦Julia Discourseにアナウンス投げました