質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

533閲覧

#Pythonの行列の計算

terausr

総合スコア5

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/05/29 08:41

PythonのNumPy(np.dot())を使って行列の計算をした時に、2次元配列*2次元配列の場合は対応する要素数を合わせなくてはならない事は分かりました。

しかし、テキストに3×2の行列と単なる2の配列がどのように計算されるのか分からなくなったため教えていただけるとありがたいです。(1)のように配列されているのか、(2)のように配列されているのか分からなくなりました。行列同士の計算と同じように、左の行列の行数に対応させるために右の配列は(2)のようなイメージ図になるのでしょうか。

(イメージ図⇩)
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x98000

2020/05/29 08:50

イメージ図では問題点が伝わりません。困っていることをコードで表せませんか?
terausr

2020/05/29 08:57

すみません、コードで表すべきでした。
guest

回答1

0

ベストアンサー

長さが n の1次元配列の場合、(1, n) なのか、(n, 1) なのか区別ができないので、行列積を計算する場合、計算前に reshape() で形状を2次元配列に変更する必要があります。
質問の例の場合、右の被演算子が長さが2の1次元配列ならば、reshape(2, 1) で 2x1 の行列に変更しておく必要があります。

どちらも2次元配列の場合

python

1import numpy as np 2 3# 3x2 4a = np.array([[0, 1], 5 [2, 3], 6 [4, 5]]) 7# 2x1 8b = np.array([[2], 9 [3]]) 10# 3x1 11c = a @ b # @ は行列積の演算子 a.dot(b) と同じ意味 12print(c) 13# [[ 3] 14# [13] 15# [23]]

1次元配列は計算前に reshape() して2次元配列にする

python

1import numpy as np 2 3# 3x2 4a = np.array([[0, 1], 5 [2, 3], 6 [4, 5]]) 7 8b = np.array([2, 3]) 9 10# 3x1 11c = a @ b.reshape(2, 1) 12print(c) 13# [[ 3] 14# [13] 15# [23]]

投稿2020/05/29 08:52

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

terausr

2020/05/29 09:00 編集

一次元配列の場合はreshapeが必要なのですね。 分かりづらい質問をしてしまいましたが回答していただきありがとうございます。 ずっともやもやしていたので助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問