mcpField
S
scipy-best-practices

scipy-best-practices

github.com/mindrallyデータ・データベース2871.0k 回インストール3 週間前に更新
リポジトリ

scipy-best-practices について

SciPy を使った科学計算の Python 開発指針をまとめたスキルです。最適化、数値計算、統計、補間、信号処理、疎行列、テストを扱います。

主な機能

  1. 01最適化手法の選択指針
  2. 02線形代数と疎行列ソルバー
  3. 03統計と補間の指針
  4. 04積分と信号処理の手法
  5. 05数値検証とテスト

活用シーン

  1. 01数値問題に適した最適化手法の選定
  2. 02大規模な疎線形システムの求解
  3. 03信号や統計データの分析
  4. 04既知の結果を用いた科学計算のテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mindrally/skills --skill scipy-best-practices

インストール後、Claude Code で/scipy-best-practicesを入力して読み込まれたか確認します。

詳細

SciPy のベストプラクティス

科学計算、最適化、信号処理、統計解析を中心とした、SciPy 開発のための専門的なガイドラインです。

コードスタイルと構成

  • 正確な SciPy の例を用いて、簡潔で技術的な Python コードを記述します
  • 数値精度と計算効率を優先します
  • 数学演算には関数型プログラミングのパターンを使用します
  • 明示的なループよりベクトル化演算を優先します
  • 科学的な文脈を反映した、わかりやすい変数名を使用します
  • PEP 8 のスタイルガイドラインに従います

scipy.optimize - 最適化

  • 汎用的な最適化には scipy.optimize.minimize() を使用します
  • 問題の特性に応じて適切な手法を選択します:
    • 'BFGS' は滑らかで制約のない問題に使用します
    • 'L-BFGS-B' は境界付きの問題に使用します
    • 'SLSQP' は制約付き最適化に使用します
    • 'Nelder-Mead' は微分不可能な関数に使用します
  • 利用可能な場合は勾配を指定して、収束を速めます
  • 非線形最小二乗フィッティングには scipy.optimize.curve_fit() を使用します
  • 方程式の根を求めるには scipy.optimize.root() を使用します

scipy.linalg - 線形代数

  • 追加機能を利用するため、numpy.linalg より scipy.linalg を優先します
  • 行列の逆行列を計算する代わりに scipy.linalg.solve() を使用します
  • 構造化行列(帯行列、三角行列)には専用のソルバーを活用します
  • 右辺が複数ある場合は scipy.linalg.lu_factor() と lu_solve() を使用します
  • 大規模な疎行列システムには scipy.sparse.linalg の疎行列ソルバーを使用します

scipy.stats - 統計

  • 確率計算には分布オブジェクトを使用します
  • 要約統計量には scipy.stats.describe() を活用します
  • 仮説検定関数 ttest_ind()、chi2_contingency()、mannwhitneyu() を使用します
  • 分布の .rvs() メソッドでランダムサンプルを生成します
  • データからパラメーターを推定するには .fit() を使用します

scipy.interpolate - 補間

  • 1 次元補間には scipy.interpolate.interp1d() を使用します
  • 散在データの補間には scipy.interpolate.griddata() を使用します
  • 適切な補間方法 'linear'、'cubic'、'nearest' を選択します
  • 滑らかな補間にはスプライン関数 UnivariateSpline、BSpline を使用します
  • 規則格子データには RegularGridInterpolator の使用を検討します

scipy.integrate - 積分

  • 単積分には scipy.integrate.quad() を使用します
  • 多重積分には scipy.integrate.dblquad()、tplquad() を使用します
  • 常微分方程式には scipy.integrate.solve_ivp() を使用します
  • 適切な ODE 手法 'RK45'、'BDF'、'LSODA' を選択します
  • スティッフなシステムでは、パフォーマンス向上のためヤコビアンを指定します

scipy.signal - 信号処理

  • フィルター設計には scipy.signal.butter()、cheby1()、ellip() を使用します
  • ゼロ位相フィルタリングには scipy.signal.filtfilt() でフィルターを適用します
  • パワースペクトル密度の推定には scipy.signal.welch() を使用します
  • ピーク検出には scipy.signal.find_peaks() を使用します
  • 畳み込みには scipy.signal.convolve() と correlate() を活用します

scipy.sparse - 疎行列

  • 用途に適した疎行列形式を使用します:
    • csr_matrix は効率的な行スライスと行列ベクトル積に使用します
    • csc_matrix は効率的な列スライスに使用します
    • coo_matrix は疎行列の構築に使用します
    • lil_matrix は逐次的な構築に使用します
  • 演算の前に最適な形式へ変換します
  • 疎線形システムには scipy.sparse.linalg のソルバーを使用します

パフォーマンスの最適化

  • 適切なデータ型を使用します(精度には float64、メモリー効率には float32)
  • 最適化された線形代数処理には、SciPy 経由で BLAS/LAPACK を活用します
  • 可能な場合は配列を事前に確保します
  • 利用可能な場合はインプレース演算を使用します

エラー処理と検証

  • 最適化ルーチンの収束ステータスを確認します
  • 数値結果が妥当であることを検証します
  • 悪条件の問題を適切に処理します
  • 収束判定には適切な許容誤差を使用します

科学計算コードのテスト

  • 既知の解析解を使ってテストします
  • 数値比較には np.testing.assert_allclose() を使用します
  • エッジケースと境界条件をテストします
  • 保存則と不変量を検証します

主な規約

  • 特定のサブモジュールをインポートします:from scipy import optimize, stats, linalg
  • 変数名と関数名には snake_case を使用します
  • アルゴリズムの選択理由とパラメーターを記載します
  • 出力に収束診断を含めます

コメント