NumPyはPythonの高速計算ライブラリで、データ分析や数値計算に欠かせないツールです。この記事では、NumPyを使った実用的なテクニックをいくつか紹介し、データ操作を高速化する方法を解説します。
目次
- NumPyのインストールと基本的な使い方
- ベクトル化 (Vectorization)
- ブロードキャスト (Broadcasting)
- インデックス操作とスライシング
- 条件インデックス操作
- 性能比較: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} 秒")