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

行列とは
行列とは数や記号、式などを矩形に並べたもので、行と列の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]]