用語比較
np.dotとnp.matmul(@)の違い|スカラーの扱いと3次元以上の配列の結果(Python3データ分析)
2次元配列どうしなら np.dot も np.matmul も同じ行列積を返し、違いが出るのは、スカラーを渡したときと、3次元以上の配列を渡したときです。
np.dot はスカラーとの積なら乗算と同じなので、スカラーとの積は *、行列積は @と使い分けます。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
np.dotとnp.matmul(@)の要点
np.dot
1次元どうしなら内積、2次元どうしなら行列積。どちらかがスカラーなら乗算と同じ。3次元以上では、公式の例で (9,5,7,4) と (9,5,4,3) の配列から (9,5,7,9,5,3) の形が返る。
np.matmul(@)
行列積を求める。スカラーを渡すと ValueError になる。3次元以上は行列の積み重ねとして扱い、公式の同じ例で (9,5,7,3) の形が返る。@ 演算子は matmul の短縮形。
違いを表で確認
| 比較軸 | np.dot | np.matmul(@) |
|---|---|---|
| スカラーを渡したとき | 乗算と同じ結果になる。公式の例では np.dot(3, 4) が 12 | ValueError になる。公式は、スカラーとの積には * を使うよう示している |
| 3次元以上の配列 | 公式の例では (9,5,7,4) と (9,5,4,3) から (9,5,7,9,5,3) の形が返る | 最後の2つの軸を行列とみなし、残りの軸をそろえて計算する。同じ例で (9,5,7,3) の形が返る |
| 2次元配列の行列積での推奨 | 行列積は返すが、公式は matmul か a @ b を勧めている | 公式が勧める書き方。@ 演算子は matmul と同じ意味で、ndarray で使える |
| 複素数の内積 | どちらの引数も複素共役にしない。np.dot([2j, 3j], [2j, 3j]) は (-13+0j) | こちらも複素共役にしない。np.matmul([2j, 3j], [2j, 3j]) も (-13+0j) |
Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
2次元の行列どうしを掛けたい人
a @ b と書きます。公式は、2次元配列の行列積には matmul か a @ b を勧めています。np.dot でも同じ結果になりますが、勧められているのは @ のほうです。
配列にスカラーを掛けたい人
a * 3 のように * を使います。np.matmul([1, 2], 3) は ValueError になり、np.dot なら乗算と同じ結果になりますが、公式は multiply か * を勧めています。
行列を積み重ねた3次元の配列で、行列ごとに積を求めたい人
np.matmul を使います。公式の例では、(2,2,4) と (2,4,2) の配列を matmul に渡すと (2,2,2) の形になり、行列ごとの積が返ります。
具体例で使い分ける
例 1
3次元以上で結果の形が変わる
公式の例の a = np.ones([9, 5, 7, 4]) と c = np.ones([9, 5, 4, 3]) を掛けます。
- np.dot(a, c).shape は (9, 5, 7, 9, 5, 3) です。
- np.matmul(a, c).shape は (9, 5, 7, 3) です。
- matmul は、行列の積み重ねどうしを軸ごとにそろえて掛けるためです(n が7、k が4、m が3)。
結論: 3次元以上では、dot と matmul は同じ結果になりません。
例 2
スカラーを渡す
公式の例で、スカラーとの積を求めます。
- np.dot(3, 4) は 12 を返します。
- np.matmul([1, 2], 3) は、スカラーの値を渡したため
ValueErrorになります。
結論: スカラーとの積は、公式が勧める * を使います。
例 3
2次元配列の行列積
公式の例の a = [[1, 0], [0, 1]] と b = [[4, 1], [2, 2]] を掛けます。
- np.dot(a, b) も np.matmul(a, b) も、array([[4, 1], [2, 2]]) を返します。
- a は単位行列なので、b がそのまま返ります。
結論: 2次元どうしなら結果は同じです。書き方は @ を選びます。
問題文から答えを選ぶ手順
- 1
配列の次元を見る
2次元どうしなら dot でも matmul でも同じ結果です。3次元以上が混ざるときは、結果の形が変わります。
- 2
スカラーとの積かを見る
スカラーとの積は、公式が勧める * を使います。matmul にスカラーを渡すと
ValueErrorです。 - 3
公式が勧める書き方を選ぶ
行列積は a @ b か matmul、スカラーとの積は * か multiply と書くと、読む人に意図が伝わります。
試験での見分け方
- 12次元配列の行列積には、公式が勧める matmul か a @ b を使う。
- 2スカラーとの積には、乗算と同じになる dot ではなく、* か multiply を使う。
- 3matmul にスカラーを渡すと
ValueErrorになる。 - 43次元以上の配列では、dot と matmul で結果の形が変わる。
誤答しやすい選択肢
np.matmul で配列にスカラーを掛けられると考える
修正: matmul はスカラーを受け付けず、ValueError になります。スカラーとの積には * を使います。
3次元以上でも dot と matmul は同じ結果だと考える
修正: 公式の例では、同じ入力で dot は (9,5,7,9,5,3)、matmul は (9,5,7,3) の形を返します。
* が行列積を求める演算子だと考える
修正: 行列積は @ か matmul です。* は要素ごとの乗算で、スカラーとの積に使います。
確認問題
Q1公式が、2次元配列の行列積に勧めている書き方は?
答え: matmul か a @ b
np.dot でも行列積は求まりますが、公式は matmul か @ を勧めています。
Q2np.matmul([1, 2], 3) を実行するとどうなるか?
答え: ValueError になる
matmul はスカラーを受け付けません。スカラーとの積には * を使います。
Q3(9,5,7,4) と (9,5,4,3) の配列を np.matmul で掛けると、結果の形は?
答え: (9, 5, 7, 3)
最後の2軸を行列として掛け、残りの軸をそろえます。np.dot なら (9,5,7,9,5,3) です。
Q4np.dot([2j, 3j], [2j, 3j]) は複素共役を取るか?
答え: 取らない
公式の例は (-13+0j) で、どちらの引数も複素共役にしません。
到達チェック
- dot と matmul の違いを、スカラーの扱いで説明できる
- 3次元以上で結果の形が変わることを言える
- 行列積に公式が勧める書き方を答えられる
- @ 演算子が matmul の短縮形だと分かる
関連ページで確認する
同じ資格で次に知りたいこと
- predictとpredict_probaの違い|クラスのラベルと確率(Python3データ分析)
scikit-learnの分類器のpredictとpredict_probaの違いを、返す値、配列の形、列の並び順、decision_functionとの関係で整理します。LogisticRegressionの公式の例で照合した確認問題つき。
- np.linalg.invとnp.linalg.solveの違い|逆行列を返すか、連立方程式の解を返すか(Python3データ分析)
NumPyのnp.linalg.inv(逆行列)とnp.linalg.solve(連立方程式の解)の違いを、渡す引数、戻り値、LinAlgErrorが出る条件で整理します。NumPy公式リファレンスの例で照合した、x0+2x1=1の計算例と確認問題つき。
- GridSearchCVとRandomizedSearchCVの違い|全探索とランダム探索(Python3データ分析)
scikit-learnのGridSearchCVとRandomizedSearchCVの違いを、探索の方法、試す回数、パラメータの渡し方、再現性で整理します。公式の説明で照合した確認問題つき。
よくある質問
Qnp.dotとnp.matmulの違いは?
スカラーを渡したとき、dot は乗算と同じ結果を返し、matmul は ValueError になります。3次元以上の配列では、結果の形も変わります。
Q@ 演算子は何ですか?
ndarray で使える、matmul の短縮形です。2次元配列の行列積には、公式が matmul か a @ b を勧めています。
Qスカラーを掛けるときはどう書きますか?
公式は multiply か * を勧めています。np.dot でも同じ結果になりますが、matmul では ValueError になります。
Qデータ分析試験の範囲?
本サイトの第2章数学の基礎の「線形代数」で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
