Pythonで線形代数を扱いたい時は、行列やベクトルをNumPyで作成するのが一般的です。ここではそのための方法についてわかりやすく解説していきます。
1. NumPyとは
NumPy は Numerical Python をつなげた言葉で「ナムパイ」と読みます。オープンソースのPythonライブラリであり、ほぼすべての科学技術計算やデータエンジニアリングに使われています。
1.1. NumPyのインストール
NumPyのインストールは簡単です。
Anacondaを使っているなら以下のコマンドを入力します。
conda install numpy
Anacondaを使っていない場合は以下のコマンドを入力します。
pip install numpy
まだPythonを入れていない場合は、Anacondaを使うことをおすすめします。Anacondaを使うと、pandas や scikit-learn などデータサイエンスに使う様々なパッケージをまとめてインストールすることができ、管理も簡単だからです。
1.2. NumPyのインポート
さて、NumPyをインストールしただけでは、まだNumPyを使うことができません。コードを書く時に、まず以下のコードでNumPyをインポートする必要があります。
なお、インポートとは何かについては『Pythonのモジュールについて抑えておくべき知識とよく使うもの一覧』の前半で解説しています。この記事では「モジュール」と表現していますが、これは「ライブラリ」や「パッケージ」と同じ意味だと捉えて頂いて問題ありません。
import numpy as np
慣習的にNumPyのインポート名は np で統一されています。こちらの方がNumPy を扱う際に時間の節約になりますし、コードが読みやすくなるからです。
さて、NumPyの始め方がわかったところで、次にNumPyで扱うデータである配列について理解を深めていきましょう。
2. NumPyの配列とは
「配列」(英: array)は、NumPyにおいて中心的なデータです。以下のように値が格子状に格納された構造をしています。
import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(a)
ご覧のように一見するとPython標準オブジェクトのリストとよく似ています。しかし科学技術計算やデータエンジニアリングには、リストよりもの配列の方が遥かに適しています。なぜなら、NumPyの配列はリストよりも高速かつコンパクトに動作しまし、データを格納するためのメモリ容量が遥かに少なく済むからです。
以上のことから、線形代数におけるベクトルや行列を扱うときは、NumPyの配列を利用することで、リストを使う場合よりもコードを最適化することができるのです。
3. NumPyの配列の作成
NumPyの配列の最大の特徴の一つとして、「次元」という概念があります。これによって、ベクトルや行列を表現することが可能になっています。実際にコードを見ながら確認していきましょう。
なお、配列の作成方法は以下の記事で解説していますので、ぜひご確認ください。
3.1. NumPy配列でベクトルを作成
ベクトルは 1次元の配列で表現します。1次元の配列とは、以下のように1行のみのデータ構造のことです。
import numpy as np
arr=np.array([1,2,3,4,5])
print("1次元配列:", arr)
この1次元配列は、線形代数におけるベクトルを意味します。
例えば、以下の2次元ベクトルを表したいとします。
\[
\vec{v}=\left[ \begin{array}{cc} 1 \\ 2 \end{array} \right]
\]
これはNumPy配列では次のように表します。
#2次元ベクトル
vec1=np.array([1,2])
print(vec1)
それでは、以下の3次元ベクトルはNumPy配列ではどう表すでしょうか。
\[
\vec{v}=\left[ \begin{array}{cc} 1 \\ 2 \\ 3 \end{array} \right]
\]
以下のように書きます。
#3次元ベクトル
vec2=np.array([1,2,3])
print(vec2)
3.2. NumPy配列で行列を作成
行列は2次元配列で表現します。2次元配列とは、以下のように行と列を持つデータ構造のことです。
import numpy as np
arr=np.array([[1,2],[3,4]])
print("2次元配列:\n", arr)
この2次元配列は、線形代数における行列を意味します。例として、以下の2次正方行列をNumPy配列で表してみましょう。
\[
mat=\left[ \begin{array}{cc} 1 & 2 \\ 3 & 4 \end{array} \right]
\]
これは次のように書きます。
#2x2行列
mat1=np.array([[1,2],[3,4]])
print(mat1)
行数と列数が異なる非正方行列も作成できます。以下の \(2\times3\) の行列を表してみましょう。
\[
mat=\left[ \begin{array}{cc} 1 & 2 & 3 \\ 4 & 5 & 6 \end{array} \right]
\]
次のように書きます。
#2x3行列
mat2=np.array([[1,2,3],[4,5,6]])
print(mat2)
任意のサイズの行列を作成することが可能です。
#3x3行列
mat3=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(mat3)
3.3. 複数のベクトルや行列を作成
なお3次元の配列を使えば、複数のベクトルや行列を一度に表すことが可能です。これを知っておくと、複数のベクトルや行列の計算が一括でできるので便利です。
例えば以下は3つの3次元ベクトルを表しています。
import numpy as np
# 3次元ベクトルが3つ
vecs=np.array([[[1,2,3]],[[4,5,6]],[[7,8,9]]])
print(vecs)
以下は3つの2次正方行列を表しています。
# 2次正方行列が3つ
mats=np.array([[[1,2],[3,4]],[[5,6],[7,8]],[[9,0],[1,2]]])
print(mats)
4. まとめ
以上がNumPyでベクトルや行列を作成する方法です。Pythonではこれらの配列を使って、線形代数のさまざまな演算を行うことができますので、ぜひ覚えておきましょう。
コメント