[Python] NumPy – 主な関数一覧

NumPyはPythonで数値計算を効率的に行うためのライブラリで、多くの便利な関数が提供されています。

主な関数としては、配列生成のためのnp.array()、ゼロ配列を作るnp.zeros()、ランダムな値を生成するnp.random.rand()、配列の形状を変更するnp.reshape()、要素ごとの演算を行うnp.add()np.multiply()、統計量を計算するnp.mean()np.std()、行列演算を行うnp.dot()などがあります。

この記事でわかること
  • NumPyの配列生成関数の使い方
  • 配列操作に関する主要な関数
  • 要素ごとの演算の方法
  • 統計量計算のための関数
  • 線形代数の基本的な計算方法

目次から探す

配列の生成に関する関数

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)
1.4142135623730951

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が自動的に小さい配列の形状を拡張して大きい配列に合わせる仕組みです。

これにより、要素ごとの演算が可能になります。

ブロードキャスティングのルール

ブロードキャスティングが適用されるためには、以下のルールが適用されます。

  1. 次元の一致: 2つの配列の次元が異なる場合、次元が小さい方の配列は、次元を1つ追加して形状を調整します。
  2. サイズの一致: 各次元のサイズが異なる場合、サイズが1の次元は、他の配列のサイズに合わせて拡張されます。
  3. サイズの不一致: どちらの配列もサイズが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の配列とPythonのリストの違いは?

NumPyの配列とPythonのリストにはいくつかの重要な違いがあります。

  • データ型: NumPyの配列は同じデータ型の要素を持つのに対し、Pythonのリストは異なるデータ型の要素を含むことができます。
  • 性能: NumPyの配列は、数値計算に特化して最適化されているため、計算速度が速く、メモリ効率も良いです。

リストは一般的なデータ構造であり、数値計算には向いていません。

  • 機能: NumPyは多次元配列をサポートし、線形代数や統計計算などの高度な数学的操作が可能です。

リストは基本的な操作に限られます。

NumPyの配列のサイズを変更する方法は?

NumPyの配列のサイズを変更するには、np.reshape()np.resize()を使用します。

  • np.reshape(): 配列の形状を変更しますが、元のデータはそのまま保持されます。
  import numpy as np
  array = np.array([1, 2, 3, 4, 5, 6])
  reshaped_array = np.reshape(array, (2, 3))
  print(reshaped_array)
  • np.resize(): 配列のサイズを変更し、新しいサイズに合わせてデータを切り取ったり、繰り返したりします。
  import numpy as np
  array = np.array([1, 2, 3])
  resized_array = np.resize(array, (2, 5))
  print(resized_array)

NumPyの配列でNaNを扱う方法は?

NumPyの配列でNaN(Not a Number)を扱うには、np.isnan()を使用してNaNを検出し、np.nan_to_num()を使ってNaNを特定の値に置き換えることができます。

  • NaNの検出:
  import numpy as np
  data = np.array([1, 2, np.nan, 4])
  nan_mask = np.isnan(data)
  print(nan_mask)
  • NaNの置き換え:
  import numpy as np
  data = np.array([1, 2, np.nan, 4])
  filled_data = np.nan_to_num(data, nan=0)  # NaNを0に置き換え
  print(filled_data)

これにより、NumPyの配列内のNaNを適切に処理することができます。

NaNの扱いはデータ分析や機械学習において重要な要素であり、正確な結果を得るために適切な処理が求められます。

まとめ

この記事では、NumPyの基本的な機能から応用例まで幅広く解説しました。

配列の生成や操作、要素ごとの演算、統計量の計算、線形代数の関数、さらにはブロードキャスティングの概念や実際の応用例についても触れました。

これらの知識を活用することで、データ分析や数値計算の効率を大幅に向上させることが可能です。

今後は、NumPyを使ったプロジェクトやデータ処理に挑戦し、実践的なスキルを身につけてみてください。

  • URLをコピーしました!
目次から探す