Python 并沒有提供數(shù)組功能为牍,雖然列表 (list) 可以完成基本的數(shù)組功能操骡,但它并不是真正的數(shù)組,而且在數(shù)據(jù)量較大時呢簸,使用列表的速度就會慢的讓人難受兽泄。為此漓概,Numpy 提供了真正的數(shù)組功能,以及對數(shù)據(jù)快速處理的函數(shù)病梢。Numpy 還是很多更高級的擴展庫的依賴庫胃珍,例如: Scipy梁肿,Matplotlib,Pandas等觅彰。此外吩蔑,值得一提的是:Numpy 內(nèi)置函數(shù)處理數(shù)據(jù)的速度是 C 語言級別的,因此編寫程序時填抬,應(yīng)盡量使用內(nèi)置函數(shù)烛芬,避免出現(xiàn)效率瓶頸的現(xiàn)象。一切計算源于數(shù)據(jù)飒责,那么我們就來看一看Numpy.genfromtxt 如何優(yōu)雅的處理數(shù)據(jù)赘娄。
官方文檔
Enthought offical tutorial: numpy.genfromtxt
A very common file format for data file is comma-separated values (CSV), or related formats such as TSV (tab-separated values). To read data from such files into Numpy arrays we can use the numpy.genfromtxt function.
案例說明
我們以數(shù)字示波器采集的實驗產(chǎn)生的三角波 (triangular waveform) 為例,它是包含數(shù)據(jù)信息的表頭宏蛉,以 .txt 格式存儲的文本文件遣臼。
Type: raw
Points: 16200
Count: 1
...
X Units: second
Y Units: Volt
XY Data:
2.4000000E-008, 1.4349E-002
2.4000123E-008, 1.6005E-002
2.4000247E-008, 1.5455E-002
2.4000370E-008, 1.5702E-002
2.4000494E-008, 1.5147E-002
...
之前,在Python科學(xué)計算——File I/O中提到了兩種方法讀取上述的數(shù)據(jù)拾并,它們共同點是將數(shù)據(jù)存儲在列表中揍堰,正如開頭所說,列表在處理大量數(shù)據(jù)時是非常緩慢的嗅义。那么屏歹,我們就來看一看 numpy.genfromtxt 如何大顯身手。
代碼示例
為了得到我們需要的有用數(shù)據(jù)之碗,我們有兩個硬的要求: (1) 跳過表頭信息西采;(2) 區(qū)分橫縱坐標(biāo)。
import numpy as np
data = np.genfromtxt('waveform.txt',delimiter=',',skip_header=18)
**delimiter: the str used to separate data. 橫縱坐標(biāo)以 ',' 分割继控,因此給 delimiter 傳入 ','。skip_header: ** the number of lines to skip at the beginning of the file. 有用數(shù)據(jù)是從19行開始的胖眷,因此給 skip_header 傳入 18武通。
print data[0:3,0], data[0:3,1]
因為讀入的是二維數(shù)據(jù),因此利用 numpy 二維數(shù)據(jù)的切片方式 (Index slicing) 輸出各自的前三個數(shù)據(jù)驗證是否讀取正確:
[ 2.40000000e-08 2.40001230e-08 2.40002470e-08]
[ 0.014349 0.016005 0.015455]
對數(shù)據(jù)進行歸一化處理后珊搀,調(diào)用 Matplotlib 畫圖命令冶忱,就可得到圖像如下:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(figsize=(8,6))
axes.plot(x, y, 'r', linewidth=3)
axes.set_xlabel('Time(ps)')
axes.set_ylabel('Amplitude[a.u.]')
fig.savefig("triangular.png", dpi=600)
補充
numpy.genformtxt( ) 函數(shù)提供了眾多的入?yún)ⅲ瑢崿F(xiàn)不同格式數(shù)據(jù)的讀取境析,詳情可參考:numpy.genfromtxt
此外囚枪,numpy 中還提供了將數(shù)據(jù)存儲為 CSV 格式的函數(shù) numpy.savetxt( ),詳情可參考:numpy.savetxt
Stay hungry, Stay foolish. -- Steve Jobs