NumPyでデータ操作を高速化:実用的なテクニック

NumPyはPythonの高速計算ライブラリで、データ分析や数値計算に欠かせないツールです。この記事では、NumPyを使った実用的なテクニックをいくつか紹介し、データ操作を高速化する方法を解説します。

目次

  1. NumPyのインストールと基本的な使い方
  2. ベクトル化 (Vectorization)
  3. ブロードキャスト (Broadcasting)
  4. インデックス操作とスライシング
  5. 条件インデックス操作
  6. 性能比較:NumPy vs. リスト操作

1. NumPyのインストールと基本的な使い方

NumPyをインストールして使い始める方法を説明します。

# NumPyのインストール
!pip install numpy

# NumPyのインポート
import numpy as np

2. ベクトル化 (Vectorization)

ベクトル化は、ループ処理を避けて計算速度を上げるためのテクニックです。

# リストをNumPy配列に変換
a = np.array([1, 2, 3, 4, 5])
b = np.array([6, 7, 8, 9, 10])

# 要素ごとの加算
sum_ab = a + b
print(sum_ab)

3. ブロードキャスト (Broadcasting)

ブロードキャストは、形状の異なる配列間の演算を行う方法です。

# スカラーと配列の要素ごとの加算
arr = np.array([1, 2, 3, 4, 5])
result = arr + 3
print(result)

4. インデックス操作とスライシング

配列内の要素や部分配列を取得・操作する方法を解説します。

# インデックス操作
sample_arr = np.array([1, 2, 3, 4, 5])
first_element = sample_arr[0]
last_element = sample_arr[-1]

# スライシング
sub_arr = sample_arr[1:4]

5. 条件インデックス操作

条件に合致する要素を抽出する方法を紹介します。

# 条件インデックス操作
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
filtered_data = data[data % 2 == 0]

6. 性能比較:NumPy vs. リスト操作

NumPyを利用することでデータ操作がどれだけ高速化されるか比較します。

import time

# リスト操作
lst_a = list(range(1000000))
lst_b = list(range(1000000,2000000))

start_time_list = time.time()
list_sum =[a+b for a,b in zip(lst_a,lst_b)]
elapsed_time_list= time.time() - start_time_list

# NumPy 操作
np_a= np.array(lst_a)
np_b= np.array(lst_b)

start_time_np= time.time()
np_sum=np_a+np_b
elapsed_time_np=time.time()-start_time_np

print(f"リストの処理時間: {elapsed_time_list:.4f} 秒")
print(f"NumPyの処理時間: {elapsed_time_np:.4f} 秒")