15. ベクトルと行列

ベクトルと行列

ベクトルとは

ベクトルは、数値や変数の並び(配列)を表します。ベクトルは方向と大きさを持ち、物理学では速度や力、数学やコンピュータ科学ではデータの集合や点の位置を表します。

行列とは

行列とは数や記号、式などを矩形に並べたもので、行と列の2次元(2D)構造のデータです。行列を組み合わせることで、3D、多次元を表現することができます。

機械学習と行列

行列は機械学習の学習モデルのにおいてとても重要な数値計算で、Pythonでは配列データとして計算します。また、NumPyを利用すると行列計算をより効率的に処理できます。

ベクトルの処理

arrange()

arrange() は連続する整数の配列(ベクトル)を作成する、Numpyの関数です。

  • range() はPythonの組み込み関数
配列 = numpy.arange(開始, 終了)

四則演算

Numpyの配列オブジェクトは、各要素に対してを四則演算(+, -, *, /) ができます。

ファイル構成

 sample/
      └── matrix.py

ベクトル作成

「1〜5」までの連続した整数の1次元配列を作成します。

matrix.py
vector = vector = np.arange(1, 6)
print(vector)
結果
[1 2 3 4 5]

ベクトルの演算

足し算

各要素に「2」を足します。

matrix.py
vector += 2
print(vector)
結果
[3 4 5 6 7]

掛け算

各要素に「2」を掛けます。

matrix.py
vector *= 2
print(vector)
結果
[ 6  8 10 12 14]

配列間の演算

配列同士を四則演算すると、一致するインデックスの要素同士で計算されます。

配列の作成

2つの2次元配列を作成します。

vector1 = np.array([1, 2, 3])
vector2 = np.array([4, 5, 6])
print(vector1)
print(vector2)
結果
[1 2 3]
[4 5 6]

足し算

2つの配列を足し算します。

matrix.py
result = vector1 + vector2 
print(result)
結果
[5 7 9]

掛け算

matrix.py
result = arr1 * arr2
print(result)
結果
[ 4 10 18]

行列の処理

zeros()

zeros() は、すべての要素が「0」の配列を生成します。

配列 = zeros(行, 列)

1 x 5 の 0行列

2 x 3 の行列を作成します。

zeros = np.zeros((5), dtype=int)
print(zeros)
結果
[0 0 0 0 0]

2 x 3 の 0行列

2 x 3 の行列を作成します。

matrix.py
zeros = np.zeros((2, 3))
print(zeros)
結果
[[0. 0. 0.]
 [0. 0. 0.]]

concatenate()

concatenate() は、指定した軸に沿って配列を結合します。 axisは結合する方向を指定するパラメーターで、デフォルトは「0」で水平方向に結合します。

concatenate((arr1, arr2, ...), axis)

shape

  • shape*プロパティは、配列の形状(行と列)を取得します。

2次元配列の作成

matrix.py
matrix1 = np.array([[1, 2, 3], [4, 5, 6]])
matrix2 = np.array([[7, 8, 9], [10, 11, 12]])

print(matrix1)
print(matrix2)
結果
[[1 2 3]
 [4 5 6]]
[[ 7  8  9]
 [10 11 12]]

2次元配列の結合

2つの行列(2次元配列)を垂直方向に結合します。

matrix.py
matrix3 = np.concatenate((matrix1, matrix2))
print(matrix3.shape)
print(matrix3)

4 x 3 の行列に結合されました。

結果
(4, 3)
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]

この行列から「7」を取得するには、行のインデックス「2」、列のインデックス「0」を指定します。

matrix.py
print(matrix3[2][0])
結果
7

2つの配列を水平方向に結合します。

matrix.py
matrix4 = np.concatenate((matrix1, matrix2), axis=1)
print(matrix4.shape)
print(matrix4)

2 x 6の行列に結合されました。

結果
(2, 6)
[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]

この行列から「7」を取得するには、行のインデックス「0」、列のインデックス「3」を指定します。

matrix.py
print(matrix4[0][3])
結果
7

reshape()

reshape() は配列の要素の総数を変更せずに、配列の次元やサイズを変更します。

新しい配列 = 配列.reshape((新しい行, 新しい列))

2 x 3 から 3 x 2に変換

2 x 3の行列を 3 x 2の行列に変換します。

matrix.py
matrix5 = np.array([[1, 2, 3], [4, 5, 6]])
new_matrix = matrix5.reshape(3, 2)
print(matrix1.shape)
print(matrix1)

print(new_matrix.shape)
print(new_matrix)
結果
(2, 3)
[[1 2 3]
 [4 5 6]]
(3, 2)
[[1 2]
 [3 4]
 [5 6]]

2 x 3 から 1 x 6に変換

2 x 3の行列を 1 x 6の行列に変換します。

matrix6 = np.array([[1, 2, 3], [4, 5, 6]])
new_matrix = matrix6.reshape(1, 6)
print(new_matrix.shape)
print(new_matrix)
結果
(1, 6)
[[1 2 3 4 5 6]]

Python超入門