[解決済み] 行列の各行にnumpy.linalg.normを適用するには?
2023-03-11 23:24:05
質問
2次元の行列があり、各行のノルムをとりたい。しかし、私が使用するとき
numpy.linalg.norm(X)
を直接使うと、行列全体のノルムを取ります。
各行のノルムを取るには、forループを使い、それぞれの
X[i]
のノルムを取ることができますが、30k行あるので膨大な時間がかかります。
より速い方法を見つけるために何か提案はありますか?または
np.linalg.norm
をマトリックスの各行に適用することは可能ですか?
どのように解決するには?
numpy 1.9+の場合
注意点として
が示すように
は、NumPy バージョン 1.9 の時点では
np.linalg.norm(x, axis=1)
がL2-normを計算する最速の方法であることを示しています。
numpyの場合 < 1.9
L2-normを計算する場合、直接計算することも可能です(
axis=-1
引数を使って)直接計算することができます。
np.sum(np.abs(x)**2,axis=-1)**(1./2)
Lp-normsももちろん同様に計算できます。
よりもかなり高速です。
np.apply_along_axis
よりもかなり高速ですが、おそらくそれほど便利ではありません。
In [48]: %timeit np.apply_along_axis(np.linalg.norm, 1, x)
1000 loops, best of 3: 208 us per loop
In [49]: %timeit np.sum(np.abs(x)**2,axis=-1)**(1./2)
100000 loops, best of 3: 18.3 us per loop
その他
ord
の形式
norm
も直接計算することができます(同様のスピードアップがあります)。
In [55]: %timeit np.apply_along_axis(lambda row:np.linalg.norm(row,ord=1), 1, x)
1000 loops, best of 3: 203 us per loop
In [54]: %timeit np.sum(abs(x), axis=-1)
100000 loops, best of 3: 10.9 us per loop
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] 2次元アレイにおけるピーク検出
-
[解決済み] pandas が他の列の値に基づいて新しい列を作成する / 複数の列の関数を行単位で適用する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Numpyでベクトルの大きさを求めるには?
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複