scipy-best-practices
PythonにおけるSciPyを用いた科学技術計算、最適化、信号処理、統計解析のベストプラクティスを提供します。SciPyの各モジュールを効果的に活用するための推奨パターンや注意点を把握したい場合に役立ちます。
description の原文を見る
Best practices for SciPy scientific computing, optimization, signal processing, and statistical analysis in Python
SKILL.md 本文
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 - 補間
- 1D 補間には
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'
- 性能を改善するため、stiff システムにはヤコビアンを提供する
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を使用する - アルゴリズムの選択とパラメータを文書化する
- 出力に収束診断を含める
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mindrally
- リポジトリ
- mindrally/skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/mindrally/skills / ライセンス: Apache-2.0
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。