イントロダクション
Numpy(Numerical Python)は、Pythonの数値計算ライブラリであり、多次元配列の処理や高速な数値演算をサポートします。Numpyは科学技術計算やデータ分析、機械学習などの分野で広く使用されており、その高いパフォーマンスと効率性から重要なツールとなっています。
この記事では、Numpyの基本から高度な操作までを詳しく解説します。Numpyの基本的な使用方法から、配列の作成と操作、数学的・統計的な関数、さらに高度な操作やエラーハンドリングまで、幅広いトピックをカバーします。
Numpyの基本
Numpyのインストール方法
Numpyをインストールするには、以下のコマンドを使用します(pipを使った場合)。
pip install numpy
Numpyの基本的な使用方法
Numpyを使用するには、まずnumpy
モジュールをインポートします。
import numpy as np
Numpyでは、多次元配列を操作するためのndarray
(N-dimensional array)というオブジェクトが中心となります。ndarray
は同じデータ型の要素を格納することができ、高速な数値計算を可能にします。
# 1次元の配列を作成
a = np.array([1, 2, 3, 4, 5])
print(a) # [1 2 3 4 5]
# 2次元の配列を作成
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
# [[1 2 3]
# [4 5 6]]
Numpyの基本的な関数
Numpyには、配列の作成や操作に便利な多くの関数が用意されています。いくつかの基本的な関数を紹介します。
Array作成
np.array
: Pythonのリストやタプルから配列を作成します。np.arange
: 指定された範囲の値で等間隔の配列を作成します。np.zeros
: 全ての要素が0の配列を作成します。np.ones
: 全ての要素が1の配列を作成します。np.linspace
: 指定された範囲の値で等間隔の配列を作成します。np.full
: 指定した値で満たされた配列を作成します。
a = np.array([1, 2, 3])
print(a) # [1 2 3]
b = np.arange(0, 10, 2)
print(b) # [0 2 4 6 8]
c = np.zeros((2, 3))
print(c)
# [[0. 0. 0.]
# [0. 0. 0.]]
d = np.ones((3, 3))
print(d)
# [[1. 1. 1.]
# [1. 1. 1.]
# [1. 1. 1.]]
e = np.linspace(0, 1, 5)
print(e) # [0. 0.25 0.5 0.75 1. ]
f = np.full((2, 2), 7)
print(f)
# [[7 7]
# [7 7]]
Array操作
np.reshape
: 配列の形状を変更します。np.resize
: 配列のサイズを変更します(要素数を増やす場合はデータを繰り返します)。np.ravel
: 配列を1次元に平坦化します。np.append
: 配列に要素を追加します。np.delete
: 配列から指定された要素を削除します。
a = np.array([[1, 2], [3, 4]])
b = np.reshape(a, (4,))
print(b) # [1 2 3 4]
c = np.resize(a, (3, 3))
print(c)
# [[1 2 3]
# [4 1 2]
# [3 4 1]]
d = np.ravel(a)
print(d) # [1 2 3 4]
e = np.append(a, [5, 6])
print(e) # [1 2 3 4 5 6]
f = np.delete(a, 0, axis=1)
print(f)
# [[2]
# [4]]
数学的・統計的な関数
Numpyは数学的な演算や統計的な処理を行うための多くの関数を提供しています。
数学的な関数
np.add
: 配列同士を要素ごとに加算します。np.subtract
: 配列同士を要素ごとに減算します。np.multiply
: 配列同士を要素ごとに乗算します。np.divide
: 配列同士を要素ごとに除算します。np.power
: 配列の要素をべき乗します。
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.add(a, b)
print(c) # [5 7 9]
d = np.subtract(a, b)
print(d) # [-3 -3 -3]
e = np.multiply(a, b)
print(e) # [ 4 10 18]
f = np.divide(a, b)
print(f) # [0.25 0.4 0.5 ]
g = np.power(a, b)
print(g) # [ 1 32 729]
統計的な関数
np.mean
: 配列の平均値を計算します。np.median
: 配列の中央値を計算します。np.std
: 配列の標準偏差を計算します。np.sum
: 配列の合計値を計算します。np.prod
: 配列の要素の積を計算します。
a = np.array([1, 2, 3, 4, 5])
b = np.mean(a)
print(b) # 3.0
c = np.median(a)
print(c) # 3.0
d = np.std(a)
print(d) # 1.4142135623730951
e = np.sum(a)
print(e) # 15
f = np.prod(a)
print(f) # 120
高度な関数
ランダムな数の生成
np.random.rand
: 0から1の範囲でランダムな数を生成します。np.random.randint
: 指定された範囲の整数の中からランダムな数を生成します。np.random.choice
: 配列からランダムに要素を選択します。
a = np.random.rand(3)
print(a) # [0.34073657 0.95788334 0.60288486]
b = np.random.randint(0, 10, 5)
print(b) # [2 8 4 6 3]
c = np.random.choice([1, 2, 3, 4, 5], size=3, replace=False)
print(c) # [4 2 5]
線形代数の操作
np.linalg.inv
: 逆行列を計算します。np.linalg.eig
: 固有値と固有ベクトルを計算します。np.dot
: 行列の積を計算します。np.cross
: ベクトルの外積を計算します。
a = np.array([[1, 2], [3, 4]])
b = np.linalg.inv(a)
print(b)
# [[-2. 1. ]
# [ 1.5 -0.5]]
c = np.linalg.eig(a)
print(c)
# (array([-0.37228132, 5.37228132]), array([[-0.82456484, -0.41597356],
# [ 0.56576746, -0.90937671]]))
d = np.dot(a, b)
print(d)
# [[1. 0.]
# [0. 1.]]
e = np.cross([1, 2, 3], [4, 5, 6])
print(e) # [-3 6 -3]
FFT(高速フーリエ変換)
np.fft.fft
: 高速フーリエ変換(FFT)を実行します。np.fft.ifft
: 逆フーリエ変換を実行します。
a = np.array([1, 2, 3, 4])
b
= np.fft.fft(a)
print(b) # [10.+0.j -2.+2.j -2.+0.j -2.-2.j]
c = np.fft.ifft(b)
print(c) # [1.+0.j 2.+0.j 3.+0.j 4.+0.j]
コメント