【わかりやすく解説】NumPy の特徴や基礎的な関数を解説!機械学習との関係も紹介!

こんにちは!株式会社キカガクの竹内です。普段は機械学習・ディープラーニングの講師をしています。

本記事は、AI や機械学習の実装で必ず使用するであろうライブラリの一つである NumPy に関する記事です。
今回は、そもそも NumPy とはどういったものであるかを解説します!

NumPy とは

NumPy の概要

NumPy(Numerical Python の略)は、Python で数値計算を効率的に行うためのライブラリです。特に多次元配列を操作するための強力な機能と、さまざまな数値計算用の関数が提供されています。
これにより、Python で科学技術計算やデータ分析を行う際には欠かせないツールとなっています。

簡単にまとめると Python での数値計算を効率よく、高速に行うことができるライブラリです。

用語解説

  • オブジェクト
    整数や実数、文字列などのデータのこと
  • ライブラリ
    便利な関数やクラスをまとめたパッケージを複数集め、まとめてインストールできるようにしたもの


NumPy が重要な理由

Python は動的型付けの言語であり、計算速度が遅いという問題点があります。それに対して NumPy は C 言語で実装されているため高速な計算が可能です。

また、Python のリストよりも効率的に大量のデータを扱うことができます。さらに、NumPy の関数はベクトル化されているため、ループ処理を書く必要がない場合が多く、コードが短くなり読みやすくなります。

NumPy の基本的な特徴

NumPy は大きく以下のような特徴が挙げられます。

NumPy の特徴
  1. 処理速度が高速
  2. 配列の扱いが柔軟
  3. ブロードキャスティング

それぞれもう少し詳しく見ていきましょう。

1. 処理速度が高速

Python は C 言語や Java に比べて for 文によるループ処理が非常に遅いです。
NumPy は数値計算のために特化されています。行列の掛け算、逆行列、固有値などの計算を高速に行うことができます。さらに、統計関数や乱数生成の機能も充実しています。

補足①

Python はインタプリタ言語であるため、コンパイル言語である C 言語や Java と比較して処理が遅くなってしまいます。 しかし、NumPy の内部は C 言語で実装されているため、Python の実装においても高速な処理を実現しています。


補足②

コンパイル言語はファイルを一括で機械が理解できるプログラムに変換して実行するプログラム言語であるのに対し、インタプリタ言語は 1 行ずつコードを読み込んで実行するため、一般的に処理速度は遅くなります。


2. 多次元配列の扱い

NumPy では Python の標準機能であるリスト型変数ではなく、NumPy の ndarray 型という特別な配列を使用します。
これにより行列の掛け算、逆行列、固有値などの計算を高速に行うことができます。さらに、統計関数や乱数生成の機能も充実しています。

注意

NumPy の関数を利用せずに、ndarray 型の配列の要素を for 文などを使って処理をすると処理速度が著しく遅くなるため注意が必要です。

3. ブロードキャスティング

ブロードキャスティングとは、NumPy で形状が異なる配列間の演算を可能にする仕組みです。これにより、要素数が一致しない配列間でも、特定の条件下で算術演算(加算、減算、乗算など)が可能になります。

import numpy as np

a = np.array([1, 2, 3])
b = 2

c = a * b
print(c)  # [2, 4, 6]

ここで、スカラー値のbが配列aの全要素に対して掛けられ、結果として配列cが生成されています。このときbaと同じ形状にブロードキャストされ、内部的にはb[2, 2, 2]という配列として扱われます。

ブロードキャスティングのルールは以下の2つです:

  1. 配列の次元数が異なる場合、次元数が少ない方の配列の形状の先頭(左側)に 1 を追加して次元数を揃えます。
  2. 2 つの配列の形状がいずれかの次元で一致しているか、あるいはいずれかの次元が 1 である場合、ブロードキャスティングが可能です。

これらのルールを満たす場合、形状が異なる 2 つの配列間でも演算が可能になります。

注意点

全ての場合でブロードキャスティングが適用できるわけではありません。
ブロードキャスティングのルールを満たさない場合、例えば(3, 2)形状の配列と(3,)形状の配列の間で演算を試みると、エラーが発生します。このような場合には、配列の形状を明示的に整形(reshape)する必要があります。

NumPy と機械学習

近年、非常に注目を浴びている機械学習や AI といった分野において、以下の理由から NumPy は必須のライブラリとなっています。

NumPy が機械学習や AI 分野で必須な理由
  1. 膨大な数値計算を高速に行うことが求められるため
  2. AI や機械学習を実装する際に便利な関数が多く用意されているため

それぞれもう少し解説していきます。

1. 膨大な数値計算を高速に行うことが求められるため

機械学習や AI は、「データ」から機械(コンピューター)が自動で学習し、データの背景にあるルールやパターンを発見する手法です。
その「データ」とは数値であり、コンピューターが膨大な数値計算を行うため、NumPy の高速な処理は非常にメリットとなります。

2. AI や機械学習を実装する際に便利な関数が多く用意されているため

NumPy で AI や機械学習を実装する際に便利な関数が多く用意されています。
こういった実装のしやすさも NumPy が必須の理由の一つです。
例えば、下記のような関数があります。

AI や機械学習を実装する際に便利な関数
  1. dot()
    行列積を計算
  2. sum(), max(), min()
    配列の要素の合計値、最大値、最小値を算出
  3. reshape()
    配列を任意の形状に変換
  4. concatenate()
    指定した軸で配列を結合
  5. transpose()
    配列の軸の順番を入れ替え

他にも様々な関数が用意されています。
気になる方は公式ドキュメントを読んでみることがおすすめです!

NumPy を使う準備

NumPy のインストール

NumPy のインストール
pip install numpy

NumPy のインポート

NumPy のインポート
import numpy as np

NumPy で使う基礎的な関数

append()

NumPy の append() 関数は、配列の末尾に値を追加するための関数です。これにより、既存の配列を容易に拡張することができます。

append()
import numpy as np
array = np.array([0,1,2])

append = np.append(array, [3, 4])
print(append)
実行結果
[0 1 2 3 4]

concatenate()

concatenate() 関数は、指定した軸に沿って配列を結合します。これにより、複数の配列を一つにまとめることができます。

concatenate()
import numpy as np
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

concatenate = np.concatenate([array1, array2])
print(concatenate)
実行結果
[1 2 3 4 5 6]

where()

where() 関数は、条件に基づいて配列の要素を選択します。これにより、条件にマッチする要素のインデックスを簡単に取得することができます。

where()
import numpy as np
array = np.array([0, 1, 2, 3])

where = np.where(array > 1)
print(where[0])
実行結果
[2 3]

arange()

arange()関数は、指定した範囲の連続する値を持つ配列を生成します。これは、一定のステップ間隔で数値の範囲を生成する場合に便利です。

arange()
import numpy as np
# np.arange(stop)
arange1 = np.arange(3)

# np.arange(start, stop)
arange2 = np.arange(5, 10)

# np.arange(start, stop, step)
arange3 = np.arange(5, 30, 5)

print(arange1)
print(arange2)
print(arange3)
実行結果
[0 1 2]
[5 6 7 8 9]
[ 5 10 15 20 25]

mean()

mean() 関数は、配列の要素の平均値を計算します。これにより、データの中心傾向を簡単に把握することができます。

mean()
import numpy as np
array = np.array([10, 20, 30, 40])

mean = np.mean(array)
print(mean)
実行結果
25.0

sum()

sum() 関数は、配列の要素の合計を計算します。これにより、データの量を簡単に算出することができます。

sum()
import numpy as np
array = np.array([10, 20, 30, 40])

sum = np.sum(array)

print(sum)
実行結果
100

max()

max() 関数は、配列の要素の最大値を計算します。これにより、データの中で最も大きな値を簡単に特定することができます。

max()
import numpy as np
array = np.array([10, 20, 30, 40])

max = np.max(array)

print(max)
実行結果
40

min()

min() 関数は、配列の要素の最小値を計算します。これにより、データの中で最も小さな値を簡単に特定することができます。

min()
import numpy as np
array = np.array([10, 20, 30, 40])

min = np.min(array)

print(min)
実行結果
10

reshape()

この関数は配列の形状を変更します。例えば、1次元配列を2次元の行列に変更したり、逆の操作をしたりすることができます。注意点として、変更前と変更後の要素数は一致しなければなりません。

reshape()
import numpy as np

a = np.array([1, 2, 3, 4, 5, 6])
b = a.reshape(2, 3)

print(b)
実行結果
[[1 2 3]
 [4 5 6]]

dot()

ベクトルの内積や行列の積を計算するための関数です。機械学習のコンテキストでは、しばしばパラメータの更新などに使用されます。

dot()
import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.dot(a, b)

print(c)
実行結果
32

linspace()

この関数は、指定した範囲内に等間隔の数値を生成します。主にデータの視覚化や実験のためのデータ生成に使用されます。

reshape()
import numpy as np

a = np.linspace(0, 1, 5)

print(a)
実行結果
[0.   0.25 0.5  0.75 1.  ]

random()

この関数は乱数を生成します。NumPyのrandomモジュールには、さまざまな分布からランダムな数値を生成する関数が提供されています。これは、ランダムなデータの生成や初期値の設定に使用されます。

random()
import numpy as np

a = np.random.rand(5)

print(a)
実行結果
[0.71144093 0.0292364  0.1817814  0.78868896 0.80410814]

sort()

配列内の要素を昇順または降順に並べ替える関数です。データの前処理や結果の整理に使用されます。

sort()
import numpy as np

a = np.array([5, 3, 1, 4, 2])
b = np.sort(a)

print(b)
実行結果
[1 2 3 4 5]

まとめと次のステップ

NumPy の理解を深めるために

NumPy は Python で科学計算を行うための基礎的なライブラリであり、その理解はデータ分析や機械学習の道を歩む上で必要不可欠です。本記事で紹介した基本的な関数や機能を自分で試してみることで、NumPy の理解を深めましょう。

次に学ぶべきライブラリ

NumPy の理解が深まったら、次に学ぶべきライブラリとしては Pandas や Matplotlib があります。Pandas はデータ分析を行うための強力なライブラリで、Matplotlib はデータの視覚化を行うためのライブラリです。これらを学ぶことで、Python でのデータ分析のスキルをさらに高めることができます。

最後に

もし、動画で NumPy の内容を学習したい!という方は、元副社長の動画がおすすめです。


https://youtu.be/qMjK2131f3I

以上、NumPy の特徴の解説でした!
皆さまも NumPy の良さを理解して、是非使ってみて下さい!

今後も、ndarray 型の詳細な説明や NumPy で準備されている便利な関数の紹介など、NumPy に関する記事を投稿予定ですのでお楽しみに!

こちらの記事もオススメ

まずは無料で学びたい方・最速で学びたい方へ

まずは無料で学びたい方: Python&機械学習入門コースがおすすめ

Python&機械学習入門コース

AI・機械学習を学び始めるならまずはここから!経産省の Web サイトでも紹介されているわかりやすいと評判の Python&機械学習入門コースが無料で受けられます!
さらにステップアップした脱ブラックボックスコースや、IT パスポートをはじめとした資格取得を目指すコースもなんと無料です!

無料で学ぶ

最速で学びたい方:キカガクの長期コースがおすすめ

一生学び放題

続々と転職・キャリアアップに成功中!受講生ファーストのサポートが人気のポイントです!

AI・機械学習・データサイエンスといえばキカガク!
非常に需要が高まっている最先端スキルを「今のうちに」習得しませんか?

無料説明会を週 2 開催しています。毎月受講生の定員がございますので確認はお早めに!

説明会ではこんなことをお話します!
  • 国も企業も育成に力を入れている先端 IT 人材とは
  • キカガクの研修実績
  • 長期コースでの学び方、できるようになること
  • 料金・給付金について
  • 質疑応答

参考リンク

参考 Chainer チュートリアル