【完全版】NumPy関数一覧|データ分析・科学計算に必須の機能をカテゴリ別に解説

python

「Pythonで数値計算をしたいけど、どの関数を使えばいいの?」
「データ分析でよく使うNumPyの機能を知りたい」
「配列操作や統計計算を効率的に行いたい」

そんなあなたにおすすめなのがNumPy(ナムパイ)です。

Pythonの数値計算ライブラリであるNumPyは、配列操作や数学関数、線形代数、乱数生成など、科学技術計算やデータ分析に欠かせない機能を豊富に提供しています。

この記事では、NumPyの主要な関数をカテゴリ別に分けて、初心者にも分かりやすく実例付きでご紹介します。

スポンサーリンク

NumPyとは?

簡単に言うと

NumPyは、Pythonで数値計算を高速に行うためのライブラリです。

特に**配列(array)**という仕組みを使って、大量のデータを一度に効率的に処理できます。

NumPyの特徴

特徴説明メリット
高速処理C言語で実装されている通常のPythonより10-100倍高速
豊富な関数数学・統計・線形代数など複雑な計算も簡単に
メモリ効率効率的なメモリ使用大量データも扱える
他ライブラリとの連携pandas、matplotlib等データ分析の基盤

インストール方法

pip install numpy

基本的な使い方

import numpy as np  # 一般的にnpという名前で使います

# 配列の作成
arr = np.array([1, 2, 3, 4, 5])
print(arr)  # [1 2 3 4 5]

配列の生成と操作

基本的な配列作成

関数使い方結果
np.array()リストから配列作成np.array([1, 2, 3])[1 2 3]
np.arange()等差数列の作成np.arange(0, 10, 2)[0 2 4 6 8]
np.linspace()等間隔で分割np.linspace(0, 1, 5)[0. 0.25 0.5 0.75 1.]

特殊な配列の作成

# 全要素が0の配列
zeros = np.zeros(5)  # [0. 0. 0. 0. 0.]

# 全要素が1の配列
ones = np.ones((3, 3))  # 3×3の1で埋められた配列

# 単位行列(対角線が1、他が0)
identity = np.eye(3)  # 3×3の単位行列

配列の形状変更

# 元の配列
arr = np.array([1, 2, 3, 4, 5, 6])

# 形状変更(2×3の行列に)
reshaped = np.reshape(arr, (2, 3))
# [[1 2 3]
#  [4 5 6]]

# 1次元に変換
flattened = reshaped.flatten()  # [1 2 3 4 5 6]

# 転置(行と列を入れ替え)
transposed = reshaped.transpose()
# [[1 4]
#  [2 5]
#  [3 6]]

配列の結合と繰り返し

# 配列の結合
a = np.array([1, 2])
b = np.array([3, 4])
combined = np.concatenate((a, b))  # [1 2 3 4]

# 配列の繰り返し
repeated = np.tile(a, 3)  # [1 2 1 2 1 2]

基本的な数学関数

四則演算

a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])

# 要素ごとの計算
add_result = np.add(a, b)        # [ 6  8 10 12] 加算
sub_result = np.subtract(b, a)   # [4 4 4 4]     減算
mul_result = np.multiply(a, b)   # [ 5 12 21 32] 乗算
div_result = np.divide(b, a)     # [5. 3. 2.33 2.] 除算

# より簡単な書き方
add_result = a + b  # 上記と同じ結果

累乗と根

x = np.array([1, 4, 9, 16])

# 累乗
powered = np.power(x, 2)  # [ 1 16 81 256]

# 平方根
sqrt_result = np.sqrt(x)  # [1. 2. 3. 4.]

指数・対数関数

x = np.array([1, 2, 3])

# 指数関数(e^x)
exp_result = np.exp(x)  # [ 2.718  7.389 20.086]

# 自然対数
log_result = np.log(x)  # [0.    0.693 1.099]

# 常用対数(底10)
log10_result = np.log10([10, 100, 1000])  # [1. 2. 3.]

その他の便利な関数

x = np.array([-3, -1, 0, 2, 5])

# 絶対値
abs_result = np.abs(x)  # [3 1 0 2 5]

# 符号(正:1, 負:-1, 0:0)
sign_result = np.sign(x)  # [-1 -1  0  1  1]

三角関数と角度変換

基本的な三角関数

# 角度(ラジアン)
angles = np.array([0, np.pi/4, np.pi/2, np.pi])

# 三角関数
sin_values = np.sin(angles)  # [0.    0.707 1.    0.   ]
cos_values = np.cos(angles)  # [1.    0.707 0.   -1.   ]
tan_values = np.tan(angles)  # [0.    1.    inf  0.   ]

逆三角関数

# 値から角度を求める
values = np.array([0, 0.5, 1])

arcsin_result = np.arcsin(values)  # [0.    0.524 1.571] ラジアン
arccos_result = np.arccos(values)  # [1.571 1.047 0.   ] ラジアン

角度変換

# 度をラジアンに変換
degrees = np.array([0, 30, 45, 90, 180])
radians = np.deg2rad(degrees)  # [0.    0.524 0.785 1.571 3.142]

# ラジアンを度に変換
degrees_back = np.rad2deg(radians)  # [0. 30. 45. 90. 180.]

統計関数

基本統計量

data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# 平均値
mean_val = np.mean(data)      # 5.5

# 中央値
median_val = np.median(data)  # 5.5

# 標準偏差
std_val = np.std(data)        # 2.87

# 分散
var_val = np.var(data)        # 8.25

# 最小値・最大値
min_val = np.min(data)        # 1
max_val = np.max(data)        # 10

パーセンタイル

data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# 25%, 50%, 75%パーセンタイル
percentiles = np.percentile(data, [25, 50, 75])
print(percentiles)  # [3.25 5.5  7.75]

ヒストグラム

# データの分布を調べる
data = np.random.normal(0, 1, 1000)  # 正規分布の乱数
hist, bins = np.histogram(data, bins=10)
print(f"ヒストグラム: {hist}")
print(f"区間: {bins}")

条件処理と検索

条件による要素選択

data = np.array([1, -2, 3, -4, 5])

# 条件に基づく選択
# 正の数なら元の値、負の数なら0
result = np.where(data > 0, data, 0)
print(result)  # [1 0 3 0 5]

# より複雑な条件
# 3より大きければ'大'、そうでなければ'小'
labels = np.where(data > 3, '大', '小')
print(labels)  # ['小' '小' '小' '小' '大']

配列の検索と処理

data = np.array([1, 0, 3, 0, 5, 3, 7])

# 0以外の要素のインデックス
nonzero_indices = np.nonzero(data)
print(nonzero_indices[0])  # [0 2 4 5 6]

# 重複を除いた要素
unique_values = np.unique(data)
print(unique_values)  # [0 1 3 5 7]

# ソート
sorted_data = np.sort(data)        # [0 0 1 3 3 5 7]
sort_indices = np.argsort(data)    # [1 3 0 2 5 4 6]

乱数生成

基本的な乱数

# シードを設定(再現可能な乱数)
np.random.seed(42)

# 0以上1未満の一様分布
uniform = np.random.rand(5)  # [0.374 0.951 0.732 0.598 0.156]

# 標準正規分布(平均0、標準偏差1)
normal = np.random.randn(5)  # [-0.847  0.767 -1.104  1.494 -0.205]

# 指定範囲の整数
integers = np.random.randint(1, 10, size=5)  # [6 3 7 4 6]

より実用的な乱数

# 選択肢からランダムに選択
choices = np.array(['りんご', 'バナナ', 'オレンジ'])
selected = np.random.choice(choices, size=3)
print(selected)  # ['バナナ' 'りんご' 'バナナ']

# カスタム分布
# 平均50、標準偏差10の正規分布
custom_normal = np.random.normal(50, 10, size=1000)

線形代数

基本的な行列演算

# 行列の定義
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# ドット積(内積)
dot_product = np.dot(A, B)
# [[19 22]
#  [43 50]]

# 行列積(matmulも同じ結果)
matrix_product = np.matmul(A, B)  # dot()と同じ結果

高度な線形代数

# 正方行列の例
matrix = np.array([[4, 2], [1, 3]])

# 逆行列
inverse = np.linalg.inv(matrix)
print(inverse)

# 行列式
determinant = np.linalg.det(matrix)
print(f"行列式: {determinant}")  # 10.0

# 固有値と固有ベクトル
eigenvalues, eigenvectors = np.linalg.eig(matrix)
print(f"固有値: {eigenvalues}")

連立方程式の解

# 連立方程式 Ax = b を解く
# 例: 2x + 3y = 7, x + 4y = 8
A = np.array([[2, 3], [1, 4]])
b = np.array([7, 8])

# 解を求める
solution = np.linalg.solve(A, b)
print(f"解: x={solution[0]}, y={solution[1]}")  # x=1.0, y=1.667

その他の便利な関数

値の制限と累積計算

data = np.array([1, 5, 3, 8, 2, 9, 4])

# 値を指定範囲に制限
clipped = np.clip(data, 3, 7)  # [3 5 3 7 3 7 4]

# 累積和
cumsum = np.cumsum(data)  # [ 1  6  9 17 19 28 32]

# 累積積
cumprod = np.cumprod([1, 2, 3, 4])  # [ 1  2  6 24]

# 隣接要素の差分
differences = np.diff(data)  # [ 4 -2  5 -6  7 -5]

要素の繰り返し

# 各要素を指定回数繰り返し
original = np.array([1, 2, 3])
repeated = np.repeat(original, 3)  # [1 1 1 2 2 2 3 3 3]

# 配列全体を繰り返し
tiled = np.tile(original, 2)  # [1 2 3 1 2 3]

実践的な使用例

データ分析の例

# 売上データの分析
sales_data = np.array([120, 150, 180, 200, 175, 190, 210, 185, 195, 220])

print(f"平均売上: {np.mean(sales_data):.1f}")
print(f"売上の標準偏差: {np.std(sales_data):.1f}")
print(f"最高売上: {np.max(sales_data)}")
print(f"最低売上: {np.min(sales_data)}")

# 平均より高い売上の日数
above_average = np.sum(sales_data > np.mean(sales_data))
print(f"平均より高い売上の日数: {above_average}日")

科学計算の例

# 物理シミュレーション:放物線運動
t = np.linspace(0, 2, 100)  # 時間(0-2秒)
v0 = 20  # 初速度(m/s)
g = 9.8  # 重力加速度(m/s²)

# 高さの計算
h = v0 * t - 0.5 * g * t**2

# 最高点の時刻と高さ
max_height_time = t[np.argmax(h)]
max_height = np.max(h)

print(f"最高点に達する時刻: {max_height_time:.2f}秒")
print(f"最高点の高さ: {max_height:.2f}m")

よくある使い方のパターン

パターン1:データの前処理

# 欠損値を含むデータの処理
data = np.array([1.0, 2.0, np.nan, 4.0, 5.0])

# NaNを平均値で置換
mean_without_nan = np.nanmean(data)  # NaNを除いた平均
data_filled = np.where(np.isnan(data), mean_without_nan, data)

パターン2:条件に基づくフィルタリング

# 成績データのフィルタリング
scores = np.array([85, 92, 78, 96, 88, 73, 91])

# 80点以上の成績のみ取得
high_scores = scores[scores >= 80]
print(high_scores)  # [85 92 96 88 91]

# 条件を満たす要素の個数
num_high_scores = np.sum(scores >= 80)
print(f"80点以上の人数: {num_high_scores}人")

パターン3:配列の変形と結合

# 複数の実験データを結合
experiment1 = np.array([1.2, 1.5, 1.3])
experiment2 = np.array([1.4, 1.6, 1.2])
experiment3 = np.array([1.3, 1.4, 1.5])

# 縦方向に結合(各実験が行になる)
all_experiments = np.vstack([experiment1, experiment2, experiment3])
print(all_experiments)
# [[1.2 1.5 1.3]
#  [1.4 1.6 1.2]
#  [1.3 1.4 1.5]]

# 各測定点の平均
averages = np.mean(all_experiments, axis=0)
print(f"各測定点の平均: {averages}")

まとめ:NumPyで効率的な数値計算を

重要なポイント

  • NumPyは数値計算の基盤:データ分析や科学計算に必須
  • 豊富な関数群:配列操作、統計、線形代数など幅広くカバー
  • 高速処理:大量データも効率的に処理可能
  • 他ライブラリとの連携:pandas、matplotlib等の基盤として重要

学習の順番

  1. 基本的な配列操作:np.array, reshape, transpose
  2. 数学関数:四則演算、統計関数
  3. 条件処理:np.where, フィルタリング
  4. 線形代数:行列演算、連立方程式
  5. 実践的な応用:データ分析、科学計算

よく使う関数トップ10

順位関数用途
1np.array()配列作成
2np.mean()平均値計算
3np.sum()合計値計算
4np.where()条件分岐
5np.arange()連続値配列作成
6np.reshape()配列形状変更
7np.max() / np.min()最大・最小値
8np.std()標準偏差
9np.random.rand()乱数生成
10np.dot()行列積・内積

コメント

タイトルとURLをコピーしました