np.loadtxtが遅いのでpd.read_tableを使ったら速くなった話
こんにちは、たくさん寝太郎です。
研究でこんな感じのデータを扱っており、二列目を入力として機械学習でコネコネしています。
二列目を取り出すのにnp.loadtxt
を使ってたのですが、ちょっと処理が遅いのが悩みでした。
ちなみに1イベントのshapeが(2400,2)で、全部で4000〜40000イベントくらいです。長いやつでは処理に5分近くかかります。
今収集してるイベント数が全部で1400万くらいです。
プログラムはこんな感じ↓
import numpy as np import os path = 'データが入ってるディレクトリ' event_list = os.listdir('path') sd_data = [] for e in event_list: event = np.loadtxt(path+'{}'.format(e)) sd_data.append(events[:,1]) X = np.array(sd_data).astype('int16')
これで約6000イベントのデータを処理した時の結果がこちら↓
real 0m55.165s user 0m48.024s sys 0m7.272s
「もうちょい速くなるやろ」と思い色々調べてるとpd.read_table
っていうのが良さげでした。
そこでプログラムを次のように変更しました。
import numpy as np import pandas as pd import os path = 'データが入ってるディレクトリ' event_list = os.listdir('path') sd_data = [] for e in event_list: event = pd.read_table(path+'{}'.format(e), delimiter=' ', header=None, names=['frequency', 'power']) sd_data.append(event['power']) X = np.array(sd_data).astype('int16')
headerを設定しないと先頭行がヘッダーになってしまうので注意です。
これで先程と同じデータを処理した結果がこちら↓
real 0m16.768s user 0m13.184s sys 0m3.612s
処理時間が70%減になりました。めでたしめでたし