numpy-best-practices
NumPy配列プログラミング、数値計算、およびPythonにおけるパフォーマンス最適化のベストプラクティスを提供します。効率的なベクトル演算やメモリ管理など、NumPyを最大限に活用するための指針として活用できます。
description の原文を見る
Best practices for NumPy array programming, numerical computing, and performance optimization in Python
SKILL.md 本文
NumPy ベストプラクティス
NumPy開発のための専門的なガイドライン。配列プログラミング、数値計算、パフォーマンス最適化に焦点を当てています。
コードスタイルと構造
- 正確なNumPyの例を含む簡潔で技術的なPythonコードを書く
- 明示的なループより、パフォーマンスのためにベクトル化操作を優先する
- データ内容を反映した説明的な変数名を使用する (例:
weights,gradients,input_array) - Pythonコードについては PEP 8 スタイルガイドに従う
- 適切な場合は関数型プログラミングパターンを使用する
配列の作成と操作
- 適切な配列作成関数を使用する:
np.array(),np.zeros(),np.ones(),np.empty(),np.arange(),np.linspace() - 配列サイズが既知の場合は、事前割り当てに
np.zeros()またはnp.empty()を優先する - 配列の結合には
np.concatenate(),np.vstack(),np.hstack()を使用する - 異なる形状の配列への操作には、ブロードキャストを活用する
インデックスとスライシング
- 条件付き選択には、ブール配列を用いた高度なインデックスを使用する
- メモリを節約するため、可能な限りコピーではなくビューを優先する
- 条件付き要素選択には
np.where()を使用する - ファンシーインデックス (コピーを作成) と基本的なスライシング (ビューを作成) の違いを理解する
データ型
dtypeパラメータを使用して、明示的に適切なデータ型を指定する- 完全な精度が不要な場合は、メモリ効率のために
np.float32を使用する - 固定サイズの整数型での整数オーバーフローに注意する
- 不要なコピーなしで型変換するために
np.asarray()を使用する
パフォーマンス最適化
ベクトル化
- Pythonループより必ずベクトル化操作を優先する
- 要素ごとの操作には NumPy ユニバーサル関数 (ufuncs) を使用する
- 複雑なテンソル操作には
np.einsum()を活用する - 行列乗算には
np.dot()または@演算子を使用する
メモリ管理
- メモリレイアウト (C連続 vs Fortran連続) を確認するために
np.ndarray.flagsを使用する - 可能な限り
outパラメータを用いた場所での操作を優先する - 大規模データセットにはメモリマップ配列 (
np.memmap) を使用する - 配列のコピーとビューに注意を払う
計算効率
- 集計には
axisパラメータを使用してnp.sum(),np.mean(),np.std()を使用する - 累積操作には
np.cumsum(),np.cumprod()を活用する - ソート済み配列の効率的な操作には
np.searchsorted()を使用する
エラーハンドリングと検証
- 計算の前に、入力の形状とデータ型を検証する
- 情報的なメッセージを含む次元チェックのためにアサーションを使用する
np.isnan(),np.isinf()を使用して、NaN と Inf 値を適切に処理する- 浮動小数点エラー処理を制御するために
np.errstate()コンテキストマネージャを使用する
乱数生成
- 最新の乱数生成には
np.random.default_rng()を使用する - 再現性のためにシードを設定する:
rng = np.random.default_rng(seed=42) - レガシー
np.random関数より新しい Generator API を優先する - 適切な分布を使用する:
rng.normal(),rng.uniform(),rng.choice()
線形代数
- 線形代数操作には
np.linalgを使用する - 線形システムでは逆行列の計算ではなく
np.linalg.solve()を活用する - 分解には
np.linalg.eig(),np.linalg.svd()を使用する - 反転前に
np.linalg.cond()で行列条件を確認する
テストとドキュメンテーション
np.testingアサーションでpytestを使用したユニットテストを書く- 完全な比較には
np.testing.assert_array_equal()を使用する - 浮動小数点比較には
np.testing.assert_array_almost_equal()を使用する - NumPy ドキュメンテーション形式に従う包括的なドキュメント文字列を含める
主要な規約
import numpy as npとしてインポートする- 変数と関数には
snake_caseを使用する - ドキュメント文字列に配列の形状を記載する
%timeitを使用してコードをプロファイルし、ボトルネックを特定する
ライセンス: 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
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。