Closed11

JuliaのB-splineパッケージを比較する

HyrodiumHyrodium

BasicBSpline.jlの野望はJuliaのB-splineパッケージの覇権を取ることですが、他のパッケージとの比較は後回しにしていました。該当issueは#161

このscrapで比較の記録をまとめていきます

HyrodiumHyrodium

比較項目はとりあえず以下の4つかな

  • BasicBSpline.jlに有るが、当該パッケージに無い機能
  • BasicBSpline.jlに無いが、当該パッケージに有る機能
  • 依存先のパッケージ(少ない方が良い)
  • Starの数
HyrodiumHyrodium

BSplines.jl

一番いい名前を取得したパッケージ。
repo: https://github.com/sostock/BSplines.jl
doc: https://sostock.github.io/BSplines.jl/dev/

  • BasicBSpline.jlに有るが、当該パッケージに無い機能
    • open knot vectorのサポート (#5)
    • 多項式次数をtype parameterに入れた高速化 (#2)
    • NURBS
    • 多次元B-spline多様体
  • BasicBSpline.jlに無いが、当該パッケージに有る機能
  • 依存先のパッケージ
    • LinearAlgebra
      • まあ当然、という感じ
    • OffsetArrays
      • BasicBSpline.jlでは使っていない。Offsetが必要なのってどこだろう?
    • RecipesBase
      • プロットレシピのためのパッケージ。BasicBSpline.jlでも依存あり
  • Starの数
    • 19
HyrodiumHyrodium

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に無いが、当該パッケージに有る機能
  • 依存先のパッケージ(少ない方が良い)
    • ArrayLayouts
    • BandedMatrices
    • FastGaussQuadrature
      • Gauss求積のためのパッケージ。
      • BasicBSpline.jlではv0.8.xまでは依存していたが、v0.9.x以降は依存をやめた。
    • LazyArrays
    • LinearAlgebra
    • Random
    • Reexport
    • SnoopPrecompile
    • SparseArrays
    • StaticArrays
  • Starの数
    • 26
HyrodiumHyrodium

比較項目に

  • 最新バージョン
  • 最終更新日

を追加すべし。

最後には表で調査結果をまとめる

HyrodiumHyrodium

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
HyrodiumHyrodium

GPT-4やBIng AIに聞いてみましたが、まともに比較してくれることは無かったです。

このスクラップは2023/03/20にクローズされました