簡體   English   中英

在將數據分配給numpy數組之前使用列表進行數據讀取是否有效?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM