
こんにちは!株式会社キカガクの竹内です。普段は機械学習・ディープラーニングの講師をしています。
本記事は、AI や機械学習の実装で必ず使用するであろうライブラリの一つである NumPy に関する記事です。
今回は、そもそも NumPy とはどういったものであるかを解説します!
目次
NumPy(Numerical Python の略)は、Python で数値計算を効率的に行うためのライブラリです。特に多次元配列を操作するための強力な機能と、さまざまな数値計算用の関数が提供されています。
これにより、Python で科学技術計算やデータ分析を行う際には欠かせないツールとなっています。
簡単にまとめると Python での数値計算を効率よく、高速に行うことができるライブラリです。
用語解説
Python は動的型付けの言語であり、計算速度が遅いという問題点があります。それに対して NumPy は C 言語で実装されているため高速な計算が可能です。
また、Python のリストよりも効率的に大量のデータを扱うことができます。さらに、NumPy の関数はベクトル化されているため、ループ処理を書く必要がない場合が多く、コードが短くなり読みやすくなります。
NumPy は大きく以下のような特徴が挙げられます。
NumPy の特徴
それぞれもう少し詳しく見ていきましょう。
Python は C 言語や Java に比べて for 文によるループ処理が非常に遅いです。
NumPy は数値計算のために特化されています。行列の掛け算、逆行列、固有値などの計算を高速に行うことができます。さらに、統計関数や乱数生成の機能も充実しています。
補足①
Python はインタプリタ言語であるため、コンパイル言語である C 言語や Java と比較して処理が遅くなってしまいます。 しかし、NumPy の内部は C 言語で実装されているため、Python の実装においても高速な処理を実現しています。
補足②
コンパイル言語はファイルを一括で機械が理解できるプログラムに変換して実行するプログラム言語であるのに対し、インタプリタ言語は 1 行ずつコードを読み込んで実行するため、一般的に処理速度は遅くなります。
NumPy では Python の標準機能であるリスト型変数ではなく、NumPy の ndarray 型という特別な配列を使用します。
これにより行列の掛け算、逆行列、固有値などの計算を高速に行うことができます。さらに、統計関数や乱数生成の機能も充実しています。
注意
NumPy の関数を利用せずに、ndarray 型の配列の要素を for 文などを使って処理をすると処理速度が著しく遅くなるため注意が必要です。
ブロードキャスティングとは、NumPy で形状が異なる配列間の演算を可能にする仕組みです。これにより、要素数が一致しない配列間でも、特定の条件下で算術演算(加算、減算、乗算など)が可能になります。
import numpy as np a = np.array([1, 2, 3]) b = 2 c = a * b print(c) # [2, 4, 6]
ここで、スカラー値のbが配列aの全要素に対して掛けられ、結果として配列cが生成されています。このときbはaと同じ形状にブロードキャストされ、内部的にはbが[2, 2, 2]という配列として扱われます。
ブロードキャスティングのルールは以下の2つです:
これらのルールを満たす場合、形状が異なる 2 つの配列間でも演算が可能になります。
注意点
全ての場合でブロードキャスティングが適用できるわけではありません。
ブロードキャスティングのルールを満たさない場合、例えば(3, 2)形状の配列と(3,)形状の配列の間で演算を試みると、エラーが発生します。このような場合には、配列の形状を明示的に整形(reshape)する必要があります。
近年、非常に注目を浴びている機械学習や AI といった分野において、以下の理由から NumPy は必須のライブラリとなっています。
NumPy が機械学習や AI 分野で必須な理由
それぞれもう少し解説していきます。
機械学習や AI は、「データ」から機械(コンピューター)が自動で学習し、データの背景にあるルールやパターンを発見する手法です。
その「データ」とは数値であり、コンピューターが膨大な数値計算を行うため、NumPy の高速な処理は非常にメリットとなります。
NumPy で AI や機械学習を実装する際に便利な関数が多く用意されています。
こういった実装のしやすさも NumPy が必須の理由の一つです。
例えば、下記のような関数があります。
AI や機械学習を実装する際に便利な関数
行列積を計算
配列の要素の合計値、最大値、最小値を算出
配列を任意の形状に変換
指定した軸で配列を結合
配列の軸の順番を入れ替え
他にも様々な関数が用意されています。
気になる方は公式ドキュメントを読んでみることがおすすめです!
pip install numpy
import numpy as np
NumPy の 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() 関数は、指定した軸に沿って配列を結合します。これにより、複数の配列を一つにまとめることができます。
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() 関数は、条件に基づいて配列の要素を選択します。これにより、条件にマッチする要素のインデックスを簡単に取得することができます。
import numpy as np array = np.array([0, 1, 2, 3]) where = np.where(array > 1) print(where[0])
[2 3]
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() 関数は、配列の要素の平均値を計算します。これにより、データの中心傾向を簡単に把握することができます。
import numpy as np array = np.array([10, 20, 30, 40]) mean = np.mean(array) print(mean)
25.0
sum() 関数は、配列の要素の合計を計算します。これにより、データの量を簡単に算出することができます。
import numpy as np array = np.array([10, 20, 30, 40]) sum = np.sum(array) print(sum)
100
max() 関数は、配列の要素の最大値を計算します。これにより、データの中で最も大きな値を簡単に特定することができます。
import numpy as np array = np.array([10, 20, 30, 40]) max = np.max(array) print(max)
40
min() 関数は、配列の要素の最小値を計算します。これにより、データの中で最も小さな値を簡単に特定することができます。
import numpy as np array = np.array([10, 20, 30, 40]) min = np.min(array) print(min)
10
この関数は配列の形状を変更します。例えば、1次元配列を2次元の行列に変更したり、逆の操作をしたりすることができます。注意点として、変更前と変更後の要素数は一致しなければなりません。
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]]
ベクトルの内積や行列の積を計算するための関数です。機械学習のコンテキストでは、しばしばパラメータの更新などに使用されます。
import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.dot(a, b) print(c)
32
この関数は、指定した範囲内に等間隔の数値を生成します。主にデータの視覚化や実験のためのデータ生成に使用されます。
import numpy as np a = np.linspace(0, 1, 5) print(a)
[0. 0.25 0.5 0.75 1. ]
この関数は乱数を生成します。NumPyのrandomモジュールには、さまざまな分布からランダムな数値を生成する関数が提供されています。これは、ランダムなデータの生成や初期値の設定に使用されます。
import numpy as np a = np.random.rand(5) print(a)
[0.71144093 0.0292364 0.1817814 0.78868896 0.80410814]
配列内の要素を昇順または降順に並べ替える関数です。データの前処理や結果の整理に使用されます。
import numpy as np a = np.array([5, 3, 1, 4, 2]) b = np.sort(a) print(b)
[1 2 3 4 5]
NumPy は Python で科学計算を行うための基礎的なライブラリであり、その理解はデータ分析や機械学習の道を歩む上で必要不可欠です。本記事で紹介した基本的な関数や機能を自分で試してみることで、NumPy の理解を深めましょう。
NumPy の理解が深まったら、次に学ぶべきライブラリとしては Pandas や Matplotlib があります。Pandas はデータ分析を行うための強力なライブラリで、Matplotlib はデータの視覚化を行うためのライブラリです。これらを学ぶことで、Python でのデータ分析のスキルをさらに高めることができます。
もし、動画で NumPy の内容を学習したい!という方は、元副社長の動画がおすすめです。
以上、NumPy の特徴の解説でした!
皆さまも NumPy の良さを理解して、是非使ってみて下さい!
今後も、ndarray 型の詳細な説明や NumPy で準備されている便利な関数の紹介など、NumPy に関する記事を投稿予定ですのでお楽しみに!
.jpg&w=3840&q=75)
キカガクの長期コースはプログラミング経験ゼロの初学者が最先端技術を使いこなすAIエンジニアになるためのサポート体制が整っています!
実際に未経験からの転職・キャリアアップに続々と成功中です
まずは無料説明会で、キカガクのサポート体制を確認しにきてください!
説明会ではこんなことをお話します!
.png&w=3840&q=75)
AI・機械学習を学び始めるならまずはここから!経産省の Web サイトでも紹介されているわかりやすいと評判の Python&機械学習入門コースが無料で受けられます!
さらにステップアップした脱ブラックボックスコースや、IT パスポートをはじめとした資格取得を目指すコースもなんと無料です!
参考 | Chainer チュートリアル
確認するSHARE
AI/データサイエンス学びはじめの方におすすめの記事
コース一覧
注目記事
新着記事
目次