PythonのNumPy入門、これから始めようとする初心者向けに分かりやすく解説|Python入門(13)

Python
この記事は約9分で読めます。

はじめに

 前回のPython入門(12では、Pythonのタプルとコレクションについて学びました。

 これにより、Pythonの基礎の基礎についてほぼ全てを解説してきました。

 以降については、Pythonをより活用するためのライブラリの利用について紹介していきます。

 Python入門の第十三弾として、PythonのNumPy入門について紹介します。

  この記事を読むと次の疑問について知ることができます。

 それでは、PythonのNumPy入門をこれから始めようとする初心者向けに分かりやすく解説していきます。

NumPyとは?

 NumPy(Numerical Python)は、Pythonで数値計算を効率的にしかも高速に実行するためのライブラリになります。

 Pythonは今では機械学習、画像処理、AI(Artificial Intelligence、人工知能)などを学ぶプログラミング言語としてよく知られていますが、これらは大量のデータ処理(数値計算)を高速に扱う必要があるためにNumPyが利用されてます。

 NumPyは、英語読みで「ナムパイ」「ナンパイ」などと呼ばれています。

NumPyを使う準備

 通常、PythonでNumPyを利用するためにはPythonにNumPyの拡張モジュールをインストールする必要がありますが、Google Colaboratory(以後、Google Colabと記述)を利用する場合は、既にNumPyはインストールされています。

  Google Colab内に既にインストールされているライブラリにはどのようなものがあるかを知るためには、次のように打ち込んでください。

!pip freeze

 Google Colab内に既にインストールされているライブラリが縦に表示され、その中に「numpy==1.21.6」があることが分かり、NumPyのバージョン1.21.6がインストールされていることが分かります。

 NumPyを利用するには、「使うための宣言、import文」をすればよいことになります。

import numpy as np

 上述の文の意味は、NumPyライブラリを読み込み、使えるようにすると共に『「numpy」⇒「np」として名前変更して利用しますよ』という宣言になります。

NumPyの基本的な使い方

 Pythonで配列などのデータを扱う際に前提のリストを利用できますが、大量のデータを扱う際には処理時間がかかりすぎるために、NumPyの「ndarray」というデータ型を使うことができます。

 この「ndarray」は、配列などの計算を高速に実行でき、しかも、数学的な便利な関数を多く用意されているためにそれら関数を利用することができます。

配列の属性

 NumPyのデータ型であるndarrayの配列には属性があり、次の3つの属性は特に重要です。

  • 形状(shape)
    配列の各次元のサイズを表し、整数のタブル型で表現されます。
    例えば、3行2列の配列はその配列の形(shape)は「タブル(3, 2)」と表現できます。
  • 次元数(ndim)
    配列の次元数を表します。
    例えば、3行2列の配列の次元数(ndim)は「2」となり、2次元配列であることを意味します。
  • サイズ(size)
    配列の全ての要素数を表します。
    例えば、3行2列の配列のサイズ(size)は「6」となり、3×2=6の要素を持つことを意味します。

配列の作成

 NumPyで配列を作成するためには、「ndarray」の配列(1次元であればベクトル、2次元であれば行列、3次元以上であればテンソル)を作成するための関数「array」を利用します。

Pythonのリストを使った配列の作成

 「ndarray」の配列は、関数「array」を利用してPythonのリストをまる括弧「(」「)」で囲って作成します。

hairetu1 = np.array(Pytonのリスト)

 実例として、1次元、2次元(2×3)、3次元(2×3×3)を作成し、それぞれの形(shape)、次元数(ndim)、サイズ(size)を出力してみましょう。

その他の配列の作成

 NmpPyには、Pythonのリストを利用せずに「ndarray」の配列を作成する方法があります。

  • 要素が全て「0」の配列の作成(zeros関数を利用)
    ここでは、3行4列の2次元の要素が全て「0」の配列を作成してみます。
  • 要素が全て「1」の配列の作成(ones関数を利用)
    ここでは、2行3列の2次元の要素が全て「1」の配列を作成してみます。
  • 要素が全て任意の数の配列の作成(full関数の利用)
    ここでは、3行2列の2次元配列の要素が全て「10」の配列を作成して見ます。
  • 対角要素が全て「1」で他の要素が「0」の配列である単位行列の作成(eye関数を利用)
    ここでは、5行5列の2次元の単位行列を作成して見ます。
  • 任意の数から始まり任意の数の1つ前の数までステップ数だけ飛ばした1次元配列の作成(arange関数を利用)
    ここでは、「1」から始まり「15」までの数で2つ飛びに作成した1次元配列を作成して見ます。(最後の「15」は含まない)
  • 要素が0~1の間の乱数で埋めた配列の作成(random.random関数の利用)
    ここでは、4行5列の要素が0~1の乱数で埋め尽くされた2次元配列を作成して見ます。

配列内の要素の参照

 「ndarray」の配列内の要素の参照は、Pythonのリスト、タプルなどと同様にインデックス(ゼロベースインデックス  )を利用して参照できます。 

 ここでは、5行6列の2次元配列(x1)を考えてみましょう。

インデックス 0
-6
1
-5
2
-4
3
-3
4
-2
5
-1
0 -5 1 2 3 4 5 6
1 -4 10 20 30 40 50 60
2 -3 100 200 300 400 500 600
3 -2 *60 -50 -40 -30 -20 -10
4 -1 -600 -500 -400 -300 -200 -100

配列の一つの要素の参照

 上述の5行6列の2次元配列の中から、一つの要素(インデックス表示:1行5列目の要素又はー4行-1列、要素60)を参照してみます。

配列の行の参照

 上述の配列「x1」の2行目又はー4列目(インデックス表示)を参照してみましょう。

配列の列の参照

 上述の配列「x1」の2列目又はー3行目(インデックス表示)を参照してみましょう。

配列の特定の領域の参照

 行が0行~2行(-5行~-3行)、列が2列~4列(-4列~-2列)の領域を参照してみましょう。

 この場合、最後の行や列に指定した行や列は含まれないことに注意しましょう。

 つまり、 行が0行~2行(-5行~-3行)、列が2列~4列(-4列~-2列)の領域を参照したいのであれば、0行~3行(-5行~-2行)、列が2列~5列(-4列~-1列)と指定する必要があります。

配列の計算

 NumPyのndarrayにより作成した配列の計算について紹介します。

 計算には、Pythonで用いた「+」、「ー」、「*」、「/」、「**」、「%」などの記号を用いて足し算、引き算、掛け算、割り算、べき乗計算、割り算の余計算が行えます。

配列と定数の計算

 ここでは、3行3列の配列と定数「5」を計算してみます。

 計算結果は。配列のそれぞれの要素に定数を計算することになります。

配列と配列の計算

 配列同士の計算の場合は、それぞれの配列の同じ要素同士の計算が行われます。

 ここでは、3行3列の2つの配列(x, y)同士の四則計算をしてみましょう。

行列積(内積)

 内積に関する数学的な意味については、ここでは解説しませんので、他の記事を参照してください。

 ここでは、計算方法を紹介します。

 例えば、2行2列の行列A、Bがあった時に、PythonのNumPyでは「np.dot()メソッド」を利用して計算ができます。

 行列 A = [[a1, a2], [a3,a4]]、B=[[b1, b2],[b3, b4]]があった際に、この行列AとBの内積C は、図で説明すると次のようになります。

  行列A   内積   行列B       行列C  
[ a1 a2 ] [ b1 b2 ] [ a1*b1 +  a2*b3 a1*b2 + a2*b4 ]
a3 a4 b3 b4 a3*b1 +  a4*b3 a3*b2 + a4*b4

 それでは、実際の行列A[[1,2],[3,4]]、行列B[[5,6],[7,8]]の内積Cを求めてみましょう。

 行列Cの要素1=a1*b1 +  a2*b3=1*5 + 2*7 = 5 + 14 = 19
 行列Cの要素2=a1*b2 +  a2*b4=1*6 + 2*8 = 6 + 16 = 22
 行列Cの要素3=a3*b1 +  a4*b3=3*5 + 4*7 = 15 + 28 = 43
 行列Cの要素4=a3*b2 +  a4*b4=3*6 + 4*8 = 18 + 32 = 50

 内積する際の注意点
 同じ行列の形状の内積をすることは問題ないのですが、異なった形状の行列の内積を計算する際には内積する行列Aの列数と内積する行列Bの行数が一致する必要があります。

 例えば、2行2列の行列Aと内積できる行列Bは2行の1次元から多次元配列である必要があります。

基本的な統計量の計算

 NumPyのndarray型のデータの合計、平均、最大値、最小値、標準偏差、分散などは関数が用意されており、簡単に求めることができます。

 これら関数を表の形にまとめました。

項目 関数 項目 関数
合計 np.sum(配列名) 平均 np.mean(配列名)
最大値 np.max(配列名) 最小値 np.min(配列名)
標準偏差 np.std(配列名) 分散 np.var(配列名)

 ここでは、8行10列のランダム関数による配(std)を作成し、その統計的な計算をしてみましょう。

おわりに

 如何だったでしょうか?

 NumPyとは?、NumPyを使う準備、NumPyの基本的な使い方、配列の属性、配列の作成、Pythonのリストを使った配列の作成、その他の配列の作成、配列内の要素の参照、配列の一つの要素の参照、配列の行の参照、配列の列の参照、配列の特定の領域の参照、配列の計算、配列と定数の計算、配列と配列の計算、行列積(内積)、基本的な統計量の計算などについて解説してきました。

 この記事を読みながらPythonの数値計算ライブラリーのNumPyを学んでもらえればと思います。

 次をお楽しみに?

以上です。

 

コメント