[解決済み] numpy dot()とPython 3.5+の行列の乗算の違い@。
2022-05-30 14:17:43
質問
最近 Python 3.5 に移行したのですが、その際に 新しい行列の乗算演算子 (@) とは異なる挙動をすることがあります。 numpy dot 演算子と異なる動作をすることがあります。例として、3次元配列の場合。
import numpy as np
a = np.random.rand(8,13,13)
b = np.random.rand(8,13,13)
c = a @ b # Python 3.5+
d = np.dot(a, b)
は
@
演算子は形状の配列を返します。
c.shape
(8, 13, 13)
の間に
np.dot()
関数が返ります。
d.shape
(8, 13, 8, 13)
同じ結果をnumpy dotで再現するにはどうしたらよいでしょうか?他に大きな違いはありますか?
どのように解決するのですか?
この
@
演算子は配列の
__matmul__
メソッドではなく
dot
. このメソッドは、API でも関数
np.matmul
.
>>> a = np.random.rand(8,13,13)
>>> b = np.random.rand(8,13,13)
>>> np.matmul(a, b).shape
(8, 13, 13)
ドキュメントから
matmul
とは異なりdot
とは二つの重要な点で異なります。
- スカラーによる乗算は許可されていません。
- 行列のスタックは、行列が要素であるかのように一緒に放送されます。
最後のポイントにより、以下のことが明らかになりました。
dot
と
matmul
メソッドは、3次元(またはそれ以上の次元)の配列を渡されたときに異なる動作をします。もう少しドキュメントから引用します。
について
matmul
:
いずれかの引数がN-D, N > 2の場合、最後の2つのインデックスに存在する行列のスタックとして扱われ、それに応じてブロードキャストされます。
については
np.dot
:
2次元配列では行列の乗算、1次元配列ではベクトルの内積(複素共役なし)と等価です。 N次元の場合、aの最終軸とbの最後から2番目の軸の和積となる
関連
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 0から9までのランダムな整数を生成する
-
[解決済み] リストにおけるdel、remove、popの違いについて
-
[解決済み] リストとタプルの違いは何ですか?
-
[解決済み] Pythonの旧スタイルのクラスと新スタイルのクラスの違いは何ですか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenvなどの違いは何ですか?
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
-
[解決済み】SciPyとNumPyの関係
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
任意波形を生成してtxtで保存するためのPython実装
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】NameError: 名前 'self' が定義されていません。