①numpyを用いて,リスト同士の内積を求めよう

実践プログラム①

list A=[1,2,3]とB=[3,2,1]の内積A*B.TとB.T*Aを求めてもらおうと思います.
B.Tというのは,転置(transpose)を表しています.
縦行列なら横行列に,横行列なら縦行列にすること.

 ・内積AB
[[10]]
・内積BA
[[3 6 9]
 [2 4 6]
 [1 2 3]]
と表示できていれば正解です.

ヒントはlistリストをnumpy配列(行列)のように扱う必要がある.

 ↓解答をみる.



















作れましたでしょうか?

[解答]

>>> import numpy as np
>>> A = [1,2,3]
>>> B = [3,2,1]
>>> A = np.array(A).reshape(1,-1)
>>> B = np.array(B).reshape(-1,1)
>>> print(np.dot(A,B))
[[10]]
>>> print(np.dot(B,A))
[[3 6 9]
 [2 4 6]
 [1 2 3]]

[解説]

import numpy as np

これはnumpyを使うという司令をだして,numpyを使う時はnpとして呼びますよという合図を示しています.

A = np.array(A).reshape(1,-1)

この使い方は汎用性があるので,覚えておいた方がいいですよ.
Aというリストをnumpy配列とします.しかし,このままですと[3,]という扱いにくい形になりますので,reshapeで形を整えます.すると,[3,] →[1,3]という扱いやすい形に買えることが出来ます.
-1というのは自動で計算してくれるものになります.今回の場合[1,3]の配列ですので.-1をすることで自動的に3として扱ってくれます.

B = np.array(B).reshape(-1,1)

上で扱ったようにすれば,
>>> B = np.array(B).reshape(1,-1)
>>> A = B.T
と同様のものになります.

np.dot(A,B)

これは内積の計算を表しています.
[1,3]行列と[3,1]行列の計算は1つになります.
[3,1]行列と[1,3]行列では[3,3]の対角行列になります.
 行列の計算につきましては,「高校 行列」として検索すれば新課程ではもう指導範囲ではないですが,旧課程では指導範囲だったためわかりやすい記事が出てくると思います.

少しずつ更新していきますので,練習していただけたら嬉しいです.

0 件のコメント :

コメントを投稿