[英]Is it efficent to use lists for data reading before assigning them to a numpy array?
我有一個大的CSV數據文件 - 大約1,444,000行數據 - 我正在讀取並轉換為numpy數組。 我讀了22列中的三列。 這就是我目前正在做的事情:
import numpy as np
import csv
fid = open('data.csv', 'r')
csvfile = csv.reader(fid, dialect='excel', delimiter=',')
csvfile.next() # to skip header
t = []
u = []
w = []
for line in csvfile:
t += [line[1]] # time
u += [line[-4]] # velocity x
w += [line[-2]] # velocity z
t = np.array(t, dtype='float')
u = np.array(u, dtype='float')
w = np.array(w, dtype='float')
所以我的問題是:這有效嗎? 我本來打算將新數據附加到循環中的現有numpy數組,直到我讀到整個數組必須每次都在內存中移動。
我會建議numpy.loadtxt() 。 我沒有將它用於csv,但你可以將分隔符設置為','並只檢索你需要的列作為numpy ndarray。
我懷疑以下內容會起作用:
# To load only columns 1 (time), 19 (velocity x), and 21 (velocity z).
numpy.loadtxt('data.csv', delimiter=',', usecols=(1,19,21))
有一種簡單的方法可以找出哪種更有效 - 編寫兩種實現(普通列表和numpy)並對它們進行分析: http : //docs.python.org/library/profile.html 。
如果您使用的是* nix操作系統,您還可以進行更簡單的測量:將每個版本的腳本運行為$ time python script.py
。
作為旁注,而不是這個
t += [line[1]] # time
用這個
t.append(line[1]) # time
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.