[Python] NumPy – 主な関数一覧
NumPyはPythonで数値計算を効率的に行うためのライブラリで、多くの便利な関数が提供されています。
主な関数としては、配列生成のためのnp.array()
、ゼロ配列を作るnp.zeros()
、ランダムな値を生成するnp.random.rand()
、配列の形状を変更するnp.reshape()
、要素ごとの演算を行うnp.add()
やnp.multiply()
、統計量を計算するnp.mean()
やnp.std()
、行列演算を行うnp.dot()
などがあります。
配列の生成に関する関数
NumPyは、数値計算を効率的に行うためのライブラリであり、配列の生成に関する多くの便利な関数を提供しています。
ここでは、主な配列生成関数について解説します。
np.array() – 配列の作成
np.array()
は、リストやタプルなどのシーケンスからNumPy配列を作成するための関数です。
import numpy as np
# リストから配列を作成
array_from_list = np.array([1, 2, 3, 4, 5])
print(array_from_list)
[1 2 3 4 5]
np.zeros() – ゼロ配列の作成
np.zeros()
は、指定した形状の配列をゼロで初期化して作成します。
import numpy as np
# 3行2列のゼロ配列を作成
zero_array = np.zeros((3, 2))
print(zero_array)
[[0. 0.]
[0. 0.]
[0. 0.]]
np.ones() – 1の配列の作成
np.ones()
は、指定した形状の配列を1で初期化して作成します。
import numpy as np
# 2行3列の1の配列を作成
ones_array = np.ones((2, 3))
print(ones_array)
[[1. 1. 1.]
[1. 1. 1.]]
np.arange() – 等差数列の生成
np.arange()
は、指定した範囲の等差数列を生成します。
import numpy as np
# 0から9までの整数の配列を作成
arange_array = np.arange(10)
print(arange_array)
[0 1 2 3 4 5 6 7 8 9]
np.linspace() – 等間隔の数値列の生成
np.linspace()
は、指定した範囲を等間隔で分割した数値列を生成します。
import numpy as np
# 0から1までを5等分した配列を作成
linspace_array = np.linspace(0, 1, 5)
print(linspace_array)
[0. 0.25 0.5 0.75 1. ]
np.eye() – 単位行列の生成
np.eye()
は、指定したサイズの単位行列を生成します。
import numpy as np
# 3x3の単位行列を作成
identity_matrix = np.eye(3)
print(identity_matrix)
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
np.random.rand() – ランダムな配列の生成
np.random.rand()
は、指定した形状の配列を生成し、要素を0から1の間のランダムな値で初期化します。
import numpy as np
# 2行3列のランダムな配列を作成
random_array = np.random.rand(2, 3)
print(random_array)
[[0.123456 0.654321 0.987654]
[0.456789 0.321654 0.789123]]
これらの関数を使用することで、NumPyを利用した配列の生成が簡単に行えます。
各関数の特性を理解し、適切に使い分けることが重要です。
配列の操作に関する関数
NumPyでは、配列の形状や構造を操作するための多くの関数が用意されています。
これらの関数を使うことで、データの整形や結合、分割が容易に行えます。
以下に主な配列操作関数を解説します。
np.reshape() – 配列の形状変更
np.reshape()
は、配列の形状を変更するための関数です。
元のデータはそのままに、異なる形状の配列を作成できます。
import numpy as np
# 1次元配列を2行3列の形状に変更
original_array = np.array([1, 2, 3, 4, 5, 6])
reshaped_array = np.reshape(original_array, (2, 3))
print(reshaped_array)
[[1 2 3]
[4 5 6]]
np.transpose() – 転置行列の作成
np.transpose()
は、配列の次元を入れ替えることで転置行列を作成します。
import numpy as np
# 2行3列の配列を転置
original_array = np.array([[1, 2, 3], [4, 5, 6]])
transposed_array = np.transpose(original_array)
print(transposed_array)
[[1 4]
[2 5]
[3 6]]
np.concatenate() – 配列の結合
np.concatenate()
は、複数の配列を指定した軸に沿って結合します。
import numpy as np
# 2つの配列を結合
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
concatenated_array = np.concatenate((array1, array2))
print(concatenated_array)
[1 2 3 4 5 6]
np.split() – 配列の分割
np.split()
は、配列を指定した数の部分に分割します。
import numpy as np
# 配列を3つに分割
original_array = np.array([1, 2, 3, 4, 5, 6])
split_arrays = np.split(original_array, 3)
print(split_arrays)
[array([1, 2]), array([3, 4]), array([5, 6])]
np.flatten() – 配列の一次元化
np.flatten()
は、多次元配列を一次元配列に変換します。
import numpy as np
# 2次元配列を一次元化
original_array = np.array([[1, 2, 3], [4, 5, 6]])
flattened_array = original_array.flatten()
print(flattened_array)
[1 2 3 4 5 6]
np.hstack() – 水平方向の結合
np.hstack()
は、配列を水平方向に結合します。
import numpy as np
# 2つの2次元配列を水平方向に結合
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])
hstacked_array = np.hstack((array1, array2))
print(hstacked_array)
[[1 2 5 6]
[3 4 7 8]]
np.vstack() – 垂直方向の結合
np.vstack()
は、配列を垂直方向に結合します。
import numpy as np
# 2つの2次元配列を垂直方向に結合
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])
vstacked_array = np.vstack((array1, array2))
print(vstacked_array)
[[1 2]
[3 4]
[5 6]
[7 8]]
これらの関数を活用することで、NumPy配列の操作が簡単に行え、データの前処理や分析に役立ちます。
各関数の使い方を理解し、適切に利用することが重要です。
要素ごとの演算に関する関数
NumPyでは、配列の要素に対して直接演算を行うための関数が用意されています。
これにより、配列同士の演算が簡単に行え、効率的な数値計算が可能になります。
以下に主な要素ごとの演算関数を解説します。
np.add() – 要素ごとの加算
np.add()
は、2つの配列の要素をそれぞれ加算します。
import numpy as np
# 2つの配列を要素ごとに加算
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
added_array = np.add(array1, array2)
print(added_array)
[5 7 9]
np.subtract() – 要素ごとの減算
np.subtract()
は、2つの配列の要素をそれぞれ減算します。
import numpy as np
# 2つの配列を要素ごとに減算
array1 = np.array([7, 8, 9])
array2 = np.array([1, 2, 3])
subtracted_array = np.subtract(array1, array2)
print(subtracted_array)
[6 6 6]
np.multiply() – 要素ごとの乗算
np.multiply()
は、2つの配列の要素をそれぞれ乗算します。
import numpy as np
# 2つの配列を要素ごとに乗算
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
multiplied_array = np.multiply(array1, array2)
print(multiplied_array)
[ 4 10 18]
np.divide() – 要素ごとの除算
np.divide()
は、2つの配列の要素をそれぞれ除算します。
import numpy as np
# 2つの配列を要素ごとに除算
array1 = np.array([10, 20, 30])
array2 = np.array([2, 5, 10])
divided_array = np.divide(array1, array2)
print(divided_array)
[ 5. 4. 3.]
np.power() – 要素ごとのべき乗
np.power()
は、配列の要素を指定した指数でべき乗します。
import numpy as np
# 配列の要素を2乗
array = np.array([1, 2, 3])
powered_array = np.power(array, 2)
print(powered_array)
[1 4 9]
np.mod() – 要素ごとの剰余
np.mod()
は、2つの配列の要素をそれぞれ剰余計算します。
import numpy as np
# 2つの配列を要素ごとに剰余計算
array1 = np.array([10, 20, 30])
array2 = np.array([3, 7, 12])
mod_array = np.mod(array1, array2)
print(mod_array)
[1 6 6]
これらの関数を使用することで、NumPy配列に対する要素ごとの演算が簡単に行えます。
各関数の特性を理解し、適切に利用することで、効率的なデータ処理が可能になります。
統計量の計算に関する関数
NumPyは、配列に対する統計量の計算を簡単に行うための関数を提供しています。
これにより、データ分析や科学計算において必要な統計的な情報を迅速に取得できます。
以下に主な統計量計算関数を解説します。
np.mean() – 平均値の計算
np.mean()
は、配列の要素の平均値を計算します。
import numpy as np
# 配列の平均値を計算
data = np.array([1, 2, 3, 4, 5])
mean_value = np.mean(data)
print(mean_value)
3.0
np.median() – 中央値の計算
np.median()
は、配列の要素の中央値を計算します。
import numpy as np
# 配列の中央値を計算
data = np.array([1, 3, 2, 5, 4])
median_value = np.median(data)
print(median_value)
3.0
np.std() – 標準偏差の計算
np.std()
は、配列の要素の標準偏差を計算します。
import numpy as np
# 配列の標準偏差を計算
data = np.array([1, 2, 3, 4, 5])
std_deviation = np.std(data)
print(std_deviation)
np.var() – 分散の計算
np.var()
は、配列の要素の分散を計算します。
import numpy as np
# 配列の分散を計算
data = np.array([1, 2, 3, 4, 5])
variance = np.var(data)
print(variance)
2.0
np.sum() – 合計値の計算
np.sum()
は、配列の要素の合計値を計算します。
import numpy as np
# 配列の合計値を計算
data = np.array([1, 2, 3, 4, 5])
sum_value = np.sum(data)
print(sum_value)
15
np.min() – 最小値の取得
np.min()
は、配列の要素の最小値を取得します。
import numpy as np
# 配列の最小値を取得
data = np.array([5, 2, 8, 1, 4])
min_value = np.min(data)
print(min_value)
1
np.max() – 最大値の取得
np.max()
は、配列の要素の最大値を取得します。
import numpy as np
# 配列の最大値を取得
data = np.array([5, 2, 8, 1, 4])
max_value = np.max(data)
print(max_value)
8
これらの関数を使用することで、NumPy配列に対する基本的な統計量の計算が簡単に行えます。
データ分析や科学計算において、これらの統計量は非常に重要な役割を果たします。
各関数の特性を理解し、適切に利用することが求められます。
線形代数に関する関数
NumPyは、線形代数の計算を行うための強力な関数を提供しています。
これにより、行列の演算や特性の分析が容易に行えます。
以下に主な線形代数関数を解説します。
np.dot() – 行列積の計算
np.dot()
は、2つの配列の行列積を計算します。
行列の次元が適切である必要があります。
import numpy as np
# 2つの行列の行列積を計算
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])
dot_product = np.dot(matrix1, matrix2)
print(dot_product)
[[19 22]
[43 50]]
np.linalg.inv() – 逆行列の計算
np.linalg.inv()
は、正方行列の逆行列を計算します。
逆行列が存在しない場合はエラーが発生します。
import numpy as np
# 行列の逆行列を計算
matrix = np.array([[1, 2], [3, 4]])
inverse_matrix = np.linalg.inv(matrix)
print(inverse_matrix)
[[-2. 1. ]
[ 1.5 -0.5]]
np.linalg.det() – 行列式の計算
np.linalg.det()
は、正方行列の行列式を計算します。
行列式は、行列の特性を示す重要な値です。
import numpy as np
# 行列の行列式を計算
matrix = np.array([[1, 2], [3, 4]])
determinant = np.linalg.det(matrix)
print(determinant)
-2.0
np.linalg.eig() – 固有値と固有ベクトルの計算
np.linalg.eig()
は、行列の固有値と固有ベクトルを計算します。
固有値は行列の特性を示し、固有ベクトルはその方向を示します。
import numpy as np
# 行列の固有値と固有ベクトルを計算
matrix = np.array([[1, 2], [2, 1]])
eigenvalues, eigenvectors = np.linalg.eig(matrix)
print("固有値:", eigenvalues)
print("固有ベクトル:\n", eigenvectors)
固有値: [ 3. -1.]
固有ベクトル:
[[ 0.70710678 -0.70710678]
[ 0.70710678 0.70710678]]
np.linalg.svd() – 特異値分解
np.linalg.svd()
は、行列の特異値分解を行います。
特異値分解は、行列を3つの行列の積に分解する手法です。
import numpy as np
# 行列の特異値分解を計算
matrix = np.array([[1, 2], [3, 4]])
U, S, Vt = np.linalg.svd(matrix)
print("U:\n", U)
print("特異値:", S)
print("Vt:\n", Vt)
U:
[[-0.40455358 -0.9145143 ]
[-0.9145143 0.40455358]]
特異値: [5.4649857 0.36596619]
Vt:
[[-0.57604844 -0.81741556]
[-0.81741556 0.57604844]]
これらの関数を使用することで、NumPyを利用した線形代数の計算が簡単に行えます。
行列の演算や特性の分析は、データ解析や機械学習などの分野で非常に重要な役割を果たします。
各関数の特性を理解し、適切に利用することが求められます。
ブロードキャスティング
NumPyのブロードキャスティングは、異なる形状の配列同士で演算を行う際に、自動的に形状を調整して計算を行う機能です。
これにより、配列のサイズを合わせる手間を省き、効率的な計算が可能になります。
ブロードキャスティングの概要
ブロードキャスティングは、異なる次元の配列を組み合わせて演算を行う際に、NumPyが自動的に小さい配列の形状を拡張して大きい配列に合わせる仕組みです。
これにより、要素ごとの演算が可能になります。
ブロードキャスティングのルール
ブロードキャスティングが適用されるためには、以下のルールが適用されます。
- 次元の一致: 2つの配列の次元が異なる場合、次元が小さい方の配列は、次元を1つ追加して形状を調整します。
- サイズの一致: 各次元のサイズが異なる場合、サイズが1の次元は、他の配列のサイズに合わせて拡張されます。
- サイズの不一致: どちらの配列もサイズが1でない次元がある場合、ブロードキャスティングは適用されず、エラーが発生します。
ブロードキャスティングを使った演算例
以下に、ブロードキャスティングを利用した演算の例を示します。
import numpy as np
# 1次元配列
array1 = np.array([1, 2, 3])
# 2次元配列
array2 = np.array([[10], [20], [30]])
# ブロードキャスティングを利用した加算
result = array1 + array2
print(result)
[[11 12 13]
[21 22 23]
[31 32 33]]
この例では、1次元配列array1
と2次元配列array2
を加算しています。
array1
は自動的に2次元に拡張され、各要素がarray2
の各行に加算されます。
ブロードキャスティングを利用することで、異なる形状の配列同士でも簡単に演算が行えるため、データ処理や数値計算が効率的に行えます。
ブロードキャスティングのルールを理解し、適切に活用することが重要です。
応用例
NumPyは、数値計算やデータ処理において非常に強力なライブラリであり、さまざまな応用が可能です。
以下に、NumPyを活用した具体的な応用例を紹介します。
NumPyを使ったデータの前処理
データ分析や機械学習の前処理において、NumPyは非常に役立ちます。
例えば、欠損値の処理やデータの正規化、標準化などが簡単に行えます。
import numpy as np
# サンプルデータ
data = np.array([1, 2, np.nan, 4, 5])
# 欠損値をゼロで置き換え
data[np.isnan(data)] = 0
print(data)
[1. 2. 0. 4. 5.]
NumPyを使った画像処理
NumPyは、画像データを配列として扱うことができるため、画像処理にも広く利用されています。
画像のフィルタリングや変換、エッジ検出などが可能です。
import numpy as np
import matplotlib.pyplot as plt
# サンプル画像の生成
image = np.random.rand(100, 100)
# 画像を表示
plt.imshow(image, cmap='gray')
plt.title('Random Image')
plt.show()
この例では、ランダムな画像を生成し、表示しています。
NumPyを使うことで、画像データの操作が容易になります。
NumPyを使った数値シミュレーション
物理現象や数理モデルのシミュレーションにおいて、NumPyは非常に便利です。
例えば、運動方程式の数値解法やモンテカルロシミュレーションなどが行えます。
import numpy as np
# モンテカルロシミュレーションの例
n = 10000
x = np.random.rand(n)
y = np.random.rand(n)
# 原点からの距離が1未満の点の数をカウント
inside_circle = np.sum(x**2 + y**2 < 1)
pi_estimate = (inside_circle / n) * 4
print("推定されたπの値:", pi_estimate)
推定されたπの値: 3.1416
NumPyとPandasの連携
NumPyはPandasの基盤となるライブラリであり、PandasのデータフレームやシリーズはNumPy配列を内部で使用しています。
これにより、NumPyの機能をPandasのデータ構造で活用できます。
import numpy as np
import pandas as pd
# NumPy配列からPandasデータフレームを作成
data = np.array([[1, 2], [3, 4], [5, 6]])
df = pd.DataFrame(data, columns=['A', 'B'])
print(df)
A B
0 1 2
1 3 4
2 5 6
NumPyとSciPyの連携
NumPyはSciPyの基盤でもあり、SciPyはNumPyを利用して高度な数値計算や科学技術計算を行います。
例えば、最適化や数値積分、微分方程式の解法などが可能です。
import numpy as np
from scipy.optimize import minimize
# 最小化する関数
def objective_function(x):
return x**2 + 5 * np.sin(x)
# 初期値
initial_guess = 0
# 最適化
result = minimize(objective_function, initial_guess)
print("最小値:", result.fun)
print("最適解:", result.x)
最小値: -3.2463942726915387
最適解: [-1.11051052]
これらの応用例からもわかるように、NumPyはデータ処理や数値計算において非常に強力なツールです。
さまざまな分野での利用が期待されており、データサイエンスや機械学習、科学技術計算などで広く活用されています。
まとめ
この記事では、NumPyの基本的な機能から応用例まで幅広く解説しました。
配列の生成や操作、要素ごとの演算、統計量の計算、線形代数の関数、さらにはブロードキャスティングの概念や実際の応用例についても触れました。
これらの知識を活用することで、データ分析や数値計算の効率を大幅に向上させることが可能です。
今後は、NumPyを使ったプロジェクトやデータ処理に挑戦し、実践的なスキルを身につけてみてください。