今回は、内積を求めるnumpyのdot()メソッドについて学びます。
スカラー.ベクトル.配列.行列を扱います。
また、実数解析や複素数の応用、グラフの可視化なども含まれます。
この科目の真の貢献は、データサイエンスと人工知能の分野です。
ベクターって何?
ベクトルとは、方向と大きさの両方を持つ矢印の形をした量のことです。
その方が、勉強するのに正確なようです。
では、ここで言う矢印の概念についてもう少し掘り下げてみましょう。
一般的な定義と表現
- マグニチュード。ベクトルが持つ値、または具体的な数値。
- 方向。ある点から別の点への流れ。
以上が、基本的な用語の詳細であり、これらの組み合わせによってベクトルが生まれます。
ベクトルを場所とともに図式化すると、次のようになる。
[ [ 1 , 2 , - 3 ],
[ 2 , 3 , 4 ],
[ 4 , - 1 , 1 ] ]
|
ベクトルから行列を作成する方法
ベクトルの最も重要な操作は、ベクトルを行列や配列の形で表現することです。
ちなみにi、j、kはそれぞれベクトルのx軸、y軸、z軸の方向成分です。
import numpy as np
list_1 = [ 23 , 12 , 3 , 11 ]
print ( 'Original list: ' , list_1)
arr = nparray(list_1)
print ( 'Numpy array: ' , arr)
print ( 'Data type of list_1' , type (list_1))
print ( 'Data type of arr' , type (arr))
# Output # Original list: [23, 12, 3, 11] # Numpy array: array([23, 12, 3, 11]) # <class: list> # numpy.ndarray |
これら3つのベクトルは、3×3の行列に変換することができます。
import numpy as np
matrix = np.array([[ 2 , 4 , 5 ], [ - 1 , - 4 , 8 ], [ 3 , - 1 , 9 ]])
print ( 'Our matrix is: ' , matrix)
# output: # Our matrix is: # array([[2, 4, 5], # [-1, -4, 8], # [3, -1, 9]]) # |
同様に、与えられた任意のベクトルの集合から行列の実装が可能です。
さて、本題の2つの配列の内積のとり方です。
Numpy 配列の操作
このリストは、ベクトルや配列に対する最も重要な操作を示しています。
- 内積:2つのベクトルの要素のすべての積の足し算。A.B.と表現される。
-
- クロスプロダクト:2つのベクトルの結果である第3のベクトル。AxBと表記される。
Pythonには、線形代数とその演算に特化した完全なライブラリ、Numpyが存在します。
NumpyとはNumerical Pythonの略で、特にn次元配列が関与する複雑な計算を行うためのものです。
Numpyはオープンソースのライブラリであり、私たちはそのコードに貢献することでより良いものにすることができます。
Pythonプログラミング言語用のAPIとして簡単に利用できます。
この記事もチェック:Numpyのブール配列の作成、演算、インデックス等を解説する
Numpy 配列の実装
このライブラリは主に複雑な数学的解析や計算のために使用されます。
そのため、より確率的にするために、その基本をいくつか勉強しておくことを確認します。
このモジュールのコアとなるデータ型はNumPyのndarrayです。
これは、主な操作が配列の合成と計算に関連するものであることを予測させます。
そのための簡単なチュートリアルをしましょう。
例として以下の様になります。
import numpy as np
a = np.array([[ 2 , 3 , 4 ], [ - 1 , 3 , 2 ], [ 9 , 4 , 8 ]])
b = np.array([[ 4 , - 1 , 2 ], [ 34 , 9 , 1 ], [ 2 , 0 , 9 ]])
addition = a + b
subtraction = a - b
multiplication = a * b
division = a / b
print ( 'Addition of arrays a and b is: ' , addition)
print ( 'Subtraction of arrays a and b is: ' , subtraction)
print ( 'Multiplication of arrays a and b is: ' , multiplication)
print ( 'Division of arrays a and b is: ' , division)
|
例2:
a.b = |a|.|b|.cosΘ # general equation of the dot product for two vectors
|
Numpyの配列に対する数学的処理
このセクションでは、数学的な操作の実装について説明します。
これらの演算は単一の整数ではとても簡単そうに見えますが、配列の場合はかなり複雑な作業となります。
- 加算
- 引き算
- 掛け算
- 2つの配列の除算
コード
import numpy as np
var_1, var_2 = 34 , 45 # for scalar values
dot_product_1 = np.dot(var_1, var_2)
dot_product_1 # for matrices a = np.array([[ 2 , 3 , 4 ], [ - 1 , 3 , 2 ], [ 9 , 4 , 8 ]])
b = np.array([[ 4 , - 1 , 2 ], [ 34 , 9 , 1 ], [ 2 , 0 , 9 ]])
dot_product_2 = np.dot(a, b)
dot_product_2 |
結果は以下の通りです。
import numpy as np
def dot_product(array_1, array_2):
prod = np.dot(array_1, array_2)
return prod
def main():
# declaring two empty arrays
arr_1 = []
arr_2 = []
# taking user input for array 1
n = int ( input ( 'Enter the number of elements for array_1: ' ))
for i in range (n):
arr_1.append( int ( input ( 'Enter number : ' ).strip()))
# taking user input for array 2
m = int ( input ( 'Enter the number of elements for array_2: ' ))
for i in range (m):
arr_2.append( int ( input ( 'Enter number: ' ).strip()))
print ( 'First array' , arr_1, ' ); print ( 'Second array' , arr_2, ' )
print ( 'The dot product of arrays is: ' , dot_product(arr_1, arr_2))
main() |
Numpy dot() product
この積は、与えられた配列の各要素のスカラー倍算です。
一般的な数学用語では、2つのベクトル間の内積は、それぞれのスカラー成分とそれらの間の角度の余弦との積になります。
しかし、Numpy配列のdot()関数では、角度Θを入れる場所がない。
そこで、2つの行列や配列をパラメータとして与えればよい。
そこで、これをコードで実装することにします。
結果を出力すると、以下の様になります。
コードの説明
- モジュールNumpyをインポートします。
-
- var_1、var_2 の2つの変数を宣言します。
-
- np.dot()関数を呼び出して、その中にすべての変数を入力します。全ては変数dot_product_1に格納します。
-
- それを画面に表示します。
-
- 多次元配列の場合、numpyのarray()メソッドで配列を作成します。その後、上記と同じ手順でdot()積を呼び出す。そして、それを画面に表示します。
この記事もチェック:Numpy配列の内積 – クイックガイド
Numpy の dot() 積への関数的アプローチ
どんなプログラミング言語でも関数を定義すると、そのコードはランダムに、本質的にいつでも呼び出せるので、とても便利です。
そこで、内積を計算するための良い到達点を作るための関数を宣言します。
コードは
説明
- まず、numpyモジュールをnpとしてインポートします。
-
- 次に、2つの配列をパラメータとする簡単な関数 dot_product() を宣言します。この関数の内部では一般的なnp.dot()メソッドが呼び出され、dot profuctを計算しprod変数に格納します。そして、この関数は最後に同じものを返します。
-
- この後、main関数で2つの空のリストを宣言します。
-
- nという変数に、配列_1の要素数を入力します。
-
- 変数mも同様です。
-
- 次に、2つのforループを実行して、配列の要素を取得します。
-
- forループは2つの変数nとmの範囲内で繰り返し実行されるため、append関数を使って値を入力します。
-
- 2番目のforループも同様です。
-
- その後、2つの配列を画面上に表示します。
-
- dot_product()関数を呼び出して内積を求め、そのパラメータとして2つの配列を与えています。
-
- 値を画面に表示した後。
結果は以下の通りです。
まとめ
さて、これでこのトピックは終わりです。
私たちは、ベクトルの数学的な実装と、ベクトルが配列とどのように密接に関係しているかを見ました。
そして、コードと画像ベースでいくつかの変換と複雑な数学的計算を見ました。
その後、Numpyモジュールの基礎と、内積のためのdot()メソッドを紹介しました。