- 配列を簡単に作成、操作したい。
- NumPyって聞いたことあるけど、どんなことができるの?
こんな悩みを解決します!!
NumPyを活用していますか?
NumPyは多次元配列を簡単に作成、操作できるライブラリです。
ベクトルや行列などの配列を操作するため、多彩な数学関数を使うことができます。
本記事では、NumPyの使い方をサンプルコードを記載しながら、わかりやすく解説します。
よく使用するNumPyのコマンドを一覧にしていますので、チートシートとして使用できます。
NumPyの使い方を忘れたときに活用できますので、最後まで読んでいただけると嬉しいです!!
そもそも、NumPyって何?
NumPyのおさらいです。
NumPyは、Pythonで多次元配列を簡単に作成、操作できるライブラリです。
読み方は「ナンパイ」です。
ベクトルや行列などの配列を操作するため、多彩な数学関数を使うことができます。
pandasとともに、データ分析や機械学習で使用頻度の高いライブラリです。
NumPyの内部はC言語 やFortranで実装されているため、非常に高速に動作します。
そのため、多次元配列の計算はPython単体で配列の処理を行わずに、NumPyを使用するのがおすすめです!
NumPy 公式サイト(英語サイト)
ライブラリのインストール
NumPyをインストールしていない方は下記コマンドをコマンドプロンプトで実行しましょう。
pip install numpy
ライブラリの使用方法
NumPyを使用するときは下記のようにインポートしましょう。
NumPyは「np」とう別名でインポートします。
import numpy as np
NumPy コマンド
配列の作成 : np.array()
np.array()でベクトルや行列といった配列を作成することができます。
リストやタプルを引数として、配列を作成します。
# リストで配列を作成
a1 = np.array([1, 2, 3, 4, 5])
# タプルで配列を作成
a2 = np.array((10, 20, 30, 40, 50))
# 結果
# a1 = [1 2 3 4 5]
# a2 = [10 20 30 40 50]
# 多次元配列の作成
a = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
# 結果
# a = [[ 1 2 3 4 5]
# [ 6 7 8 9 10]]
配列の作成 : arange()
np.arange()でベクトルや行列といった配列を作成することができます。
range()関数のように、範囲を指定して配列の要素を入れることができます。
# 指定の範囲で配列を作成
a1 = np.arange(5)
a2 = np.arange(5, 10)
a3 = np.arange(1, 10, 2)
# 結果
# a1 = [0 1 2 3 4]
# a2 = [5 6 7 8 9]
# a3 = [1 3 5 7 9]
ゼロ行列の作成 : zeros()
np.zeros()でゼロ行列を作成することができます。
引数にタプルで指定すると、〇行〇列のゼロ行列が作成できます。
# ゼロ行列の作成
a1 = np.zeros(9)
a2 = np.zeros((2,3))
# 結果
# a1 = [0. 0. 0. 0. 0. 0. 0. 0. 0.]
# a2 = [[0. 0. 0.]
# [0. 0. 0.]]
要素がすべて1の行列の作成 : ones()
np.ones()で要素がすべて1の行列を作成することができます。
zeros()と同様、引数にタプルで指定すると、〇行〇列のゼロ行列が作成できます。
# 要素がすべて1の行列の作成
a1 = np.ones(9)
a2 = np.ones((2,3))
# 結果
# a1 = [1. 1. 1. 1. 1. 1. 1. 1. 1.]
# a2 = [[1. 1. 1.]
# [1. 1. 1.]]
単位行列の作成 : identity()
np.identity()で単位行列を作成することができます。
単位行列は正方行列のため、引数は単位行列のサイズを指定します。
# 単位行列の作成
a1 = np.identity(2)
a2 = np.identity(3)
# 結果
# a1 = [[1. 0.]
# [0. 1.]]
# a2 = [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
要素の値がランダムな配列の作成 : random.rand()
np.random.rand()で要素の値がランダムな配列を作成することができます。
引数は行列のサイズを指定します。
# 要素の値がランダムな配列の作成
a1 = np.random.rand(5)
a2 = np.random.rand(3, 3)
# 結果
# 要素の値はランダムなため、結果は参考値になります
# a1 = [0.22525017 0.83097052 0.37823307 0.43291502 0.92236717]
# a2 = [[0.74896844 0.01655238 0.90469104]
# [0.74119293 0.55361763 0.02249868]
# [0.51705556 0.5060747 0.9166981 ]]
乱数を固定したい場合は、下記コードを直前に追加します。
# 乱数を固定
np.random.seed(0)
配列のサイズ変更 : reshape()
reshape()で、行と列のサイズを変更することができます。
reshape(行, 列)で入力します。
# 行、列のサイズ変更
a1 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
a2 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]).reshape(3,3)
# 結果
# a1 = [ 1 2 3 4 5 6 7 8 9]
# a2 = [[ 1 2 3]
# [ 4 5 6]
# [ 7 8 9]]
1次元配列に変換 : flatten()
flatten()で、多次元配列を1次元配列に変換することができます。
# 多次元配列を1次元配列に変換
a1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
a2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]).flatten()
# 結果
# a1 = [[1 2 3]
# [4 5 6]
# [7 8 9]]
# a2 = [1 2 3 4 5 6 7 8 9]
配列のサイズを調べる : shape
shapeで、配列のサイズを調べることができます。
# 配列のサイズを調べる
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = a.shape
# 結果
# a1 = [[1 2 3]
# [4 5 6]
# [7 8 9]]
# b = (3, 3)
配列の次元を調べる : ndim
ndimで、配列のサイズを調べることができます。
# 配列の次元を調べる
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = a.ndim
# 結果
# a1 = [[1 2 3]
# [4 5 6]
# [7 8 9]]
# b = 2 ※3行3列の2次元のため、出力結果は2
配列の要素数を調べる : size
sizeで、配列の要素数を調べることができます。
# 配列の要素数を調べる
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = a.size
# 結果
# a1 = [[1 2 3]
# [4 5 6]
# [7 8 9]]
# b = 9
配列の要素を追加 : append()
np.append()で配列の要素を追加することができます。
# 要素の追加
a1 = np.array([1, 2, 3, 4, 5, 6])
a2 = np.array([7, 8, 9])
a3 = np.append(a1, a2)
# 結果
# a1 = [1 2 3 4 5 6]
# a2 = [7 8 9]
# a3 = [1 2 3 4 5 6 7 8 9]
行を追加する場合は、引数に「axis=0」を追加します。
# 行の追加
a1 = np.array([[1, 2, 3], [4, 5, 6]])
a2 = np.array([[7, 8, 9], [10, 11, 12]])
a3 = np.append(a1, a2, axis=0)
# 結果
# a1 = [[1 2 3]
# [4 5 6]]
# a2 = [[ 7 8 9]
# [10 11 12]]
# a3 = [[ 1 2 3]
# [ 4 5 6]
# [ 7 8 9]
# [10 11 12]]
列を追加する場合は、引数に「axis=1」を追加します。
# 列の追加
a1 = np.array([[1, 2, 3], [4, 5, 6]])
a2 = np.array([[7, 8, 9], [10, 11, 12]])
a3 = np.append(a1, a2, axis=1)
# 結果
# a1 = [[1 2 3]
# [4 5 6]]
# a2 = [[ 7 8 9]
# [10 11 12]]
# a3 = [[ 1 2 3 7 8 9]
# [ 4 5 6 10 11 12]]
配列の操作
配列内の要素を参照
配列はインデックスを指定することで、要素を参照することができます。
# 配列内の要素を参照
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b1 = a[0])
b2 = a[0][1])
b3 = a[0, 1])
b4 = a[:, 1])
b5 = a[1, :])
# 結果
# a1 = [[1 2 3]
# [4 5 6]
# [7 8 9]]
# b1 = [1 2 3]
# b2 = 2
# b3 = 2
# b4 = [2 5 8]
# b5 = [4 5 6]
配列に対する四則演算
配列に対して四則演算を行うと、各要素に対して計算を行います。
# 配列の計算
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b1 = a + 1
b2 = a - 1
b3 = a * 2
b4 = a / 2
# 結果
# a = [[1 2 3]
# [4 5 6]
# [7 8 9]]
# b1 = [[ 2 3 4]
# [ 5 6 7]
# [ 8 9 10]]
# b2 = [[0 1 2]
# [3 4 5]
# [6 7 8]]
# b3 = [[ 2 4 6]
# [ 8 10 12]
# [14 16 18]]
# b4 = [[0.5 1. 1.5]
# [2. 2.5 3. ]
# [3.5 4. 4.5]]
配列同士の計算
配列同士の計算をすることも可能です。
行列とベクトルを計算すると、列すべてに対して計算を行います。
# 行列とベクトルの計算
a1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
a2 = np.array([[10], [10], [10]])
a3 = a1 + a2
# 結果
# a1 = [[1 2 3]
# [4 5 6]
# [7 8 9]]
# a2 = [[10]
# [10]
# [10]]
# a3 = [[11 12 13]
# [14 15 16]
# [17 18 19]]
行列と行列の計算は、各要素同士で行われます。
# 行列と行列の計算
a1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
a2 = np.array([[10, 11, 12], [13, 14, 15], [16, 17, 18]])
a3 = a1 + a2
# 結果
# a1 = [[1 2 3]
# [4 5 6]
# [7 8 9]]
# a2 = [[10 11 12]
# [13 14 15]
# [16 17 18]]
# a3 = [[11 13 15]
# [17 19 21]
# [23 25 27]]
内積計算 : dot()
np.dot()で行列の内積を計算することができます。
# 内積の計算
a1 = np.array([[1, 2], [3, 4]])
a2 = np.array([[5, 6], [7, 8]])
a3 = np.dot(a1, a2)
# 結果
# a1 = [[1 2]
# [3 4]]
# a2 = [[5 6]
# [7 8]]
# a3 = [[19 22]
# [43 50]]
配列の合計、最大値、最小値、平均値 : sum(), max(), min(), average()
配列の要素の合計や最大値、最小値、平均を求めることができます。
# 配列の処理
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 合計
b1 = np.sum(a1)
# 最大値
b2 = np.max(a1)
# 最小値
b3 = np.min(a1)
# 平均値
b4 = np.average(a1)
# 結果
# a = [[1 2 3]
# [4 5 6]
# [7 8 9]]
# b1 = 45
# b2 = 9
# b3 = 1
# b4 = 5.0
行方向、列方向の処理
axisを指定することで、行列の行方向、列方向への処理を行うことができる。
# 行方向、列方向の処理
a1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 全体への処理
b1 = np.sum(a1)
# 行方向の足し算
b2 = np.sum(a1, axis=0)
# 列方向の処理
b3 = np.sum(a1, axis=1)
# 結果
# a = [[1 2 3]
# [4 5 6]
# [7 8 9]]
# b1 = 45
# b2 = [12 15 18]
# b3 = [ 6 15 24]
おすすめ書籍
まとめ
本記事では、NumPyの使い方をわかりやすく解説しました。
NumPyは、Pythonで数値計算を行うための強力なライブラリです。
多次元配列を効率的に扱うことができ、行列計算や統計処理などの数学関数を豊富に提供しているので、ぜひマスターしてください。
本記事で詳細しているサンプルコードをコピペすれば、簡単にコードに使用することができますので、ぜひご利用ください!
Pythonを効率的に学習するために
Pythonの学習方法は、書籍やyoutube、スクールなどがありますが、一番のおすすめはオンラインスクールでの学習です。
オンラインスクールを勧める理由は以下の通り。
- 学習カリキュラムが整っているので、体系的に学ぶことができる。
- 時間や場所を選ばずに、自分のペースで学習できる。
- 学習で詰まったときに、気軽に質問できる環境がある。
オンラインスクールについてはコチラの記事で紹介しています。
⇒ これで決まり!Pythonオンラインスクール おすすめ3社を厳選!
2024年10月1日から給付制度が拡充され、最大80%給付されるスクールもあります。
Python学習を効率的に進めるために、スクールの検討をしてみてください。
おすすめオンラインスクール
コスト重視:デイトラ
AIスキル重視:Aidemy PREMIUM
転職重視:キカガク
最後まで読んでいただきありがとうございます!
ご意見、ご感想があれば、コメントを頂けるとうれしいです!!