以下分別是numpy、Scipy、pandas的簡介。雖然這些包提供的一些結構比python自身的“更高級、更高效”,更高級是因為它們能完成更高級的任務,但是,學習的時候盡量不要和python割裂開認識,最好是辯證的看問題,既要看到區別,又要看到聯系,這樣才能理解深刻、真正的運用自如。比如python提供list這種數據結構,可以用來當作數組使用;比如我們定義一個list。a=range(10),但是要是對每個元素同時操作比如平方操作,這時候可能需要寫個循環,就沒有np.arange(10)**2方便。同時,以下的簡介和case中也會從對比和聯系的角度出發,一塊學習這些概念或是實體。
What is numpy?
標准安裝的Python中用列表(list)保存一組值,可以用來當作數組使用,不過由於列表的元素可以是任何對象,因此列表中所保存的是對象的指針。這樣為了保存一個簡單的[1,2,3],需要有3個指針和三個整數對象。對於數值運算來說這種結構顯然比較浪費內存和CPU計算時間。
此外Python還提供了一個array模塊,array對象和列表不同,它直接保存數值,和C語言的一維數組比較類似。但是由於它不支持多維,也沒有各種運算函數,因此也不適合做數值運算。
NumPy的誕生彌補了這些不足,NumPy提供了兩種基本的對象:ndarray(N-dimensional array object)和 ufunc(universal function object)。即提供常用的數值數組、矩陣等函數。ndarray(下文統一稱之為數組)是存儲單一數據類型的多維數組,而ufunc則是能夠對數組進行處理的函數。
優點是:是基於向量化的運算,進行數值運算時Numpy數組比list效率高
以上部分主要參考《利用numpy做科學計算》一書(點擊書名查看詳細介紹)
What is Scipy?
numpy 准確地說提供了一個在python中做科學計算的基礎庫,俠義地講它重在數值計算,甚至可以說是用於多維數組處理的庫;而 scipy 則是基於numpy,提供了一個在python中做科學計算的工具集,也就是說它是更上一個層次的庫,主要包含一下模塊:
- statistics
- optimization
- numerical integration
- linear algebra
- Fourier transforms
- signal processing
- image processing
- ODE solvers
- special functions
What is pandas?
是一種構建於Numpy的高級數據結構和精巧工具,快速簡單的處理數據。
- 支持自動或明確的數據對齊的帶有標簽軸的數據結構。
- 整合的時間序列功能。
- 以相同的數據結構來處理時間序列和非時間序列。
- 支持傳遞元數據(坐標軸標簽)的算術運算和縮減。
比如,要是沒有pandas,對某行元素的操作或是說轉置可能需要很多循環。
- 靈活處理丟失數據。
- 在常用的基於數據的數據庫(例如基於SQL)中的合並和其它關系操作。
- 提供數據結構:Series和DataFrame