Numpy 中文用戶指南 1. 安裝

譯者:飛龍html

1.1 NumPy 是什麼?

原文:What is NumPy?git

NumPy是Python中用於科學計算的基礎包。它是一個Python庫,提供多維數組對象,各類派生的對象(如掩碼數組和矩陣),以及數組快速操做的各類各樣的例程,包括數學、邏輯、圖形操做,排序、選擇、I/O、離散傅里葉變換、基本線性代數、基本統計操做,隨機模擬以及其餘。程序員

NumPy包的核心是ndarray對象。它封裝了均勻數據類型的n維數組,帶有一些在編譯過的代碼中執行的操做。NumPy數組和Python標準列表有一些重要的差別:github

  • NumPy數組在建立時有固定的大小,不像Python列表(可動態增加)。改變一個ndarray的大小將建立一個新數組,並刪除原有數組。數組

  • NumPy數組中的元素都必須是相同的數據類型,從而具備相同的內存大小。但有個例外:(Python,包括NumPy)對象數組的元素大小是不一樣的。app

  • NumPy數組使大量數據上的高級數學運算和其餘類型的操做變得容易。一般狀況下,這樣的操做可能比使用Python的內置列表效率更高,執行的代碼更少。函數

  • 愈來愈多的基於Python的科學和數學包使用NumPy數組;雖然它們一般支持Python列表做爲輸入,但他們會在處理以前將這些輸入轉換爲NumPy數組,並老是輸出NumPy數組。換句話說,爲了高效使用許多(也許甚至是大多數)當今基於Python的科學/數學軟件,只要知道如何使用Python的內置列表類型是不夠的————你還須要知道如何使用NumPy數組。優化

序列大小和速度在科學計算中尤其重要。例如考慮兩個長度相同的列表中每一個元素相乘的狀況。若是數據被存儲在兩個Python列表 a 和 b 中,咱們能夠這樣遍歷每一個元素:ui

c = []
for i in range(len(a)):
    c.append(a[i]*b[i])

這就產生了正確的答案,但若是 a 和 b 都含有數以百萬計的數字,咱們將爲Python的低效循環付出代價。咱們能夠這樣以C語言編寫代碼來完成一樣的任務(爲清楚起見咱們忽略變量聲明和初始化、內存分配等):編碼

for (i = 0; i < rows; i++): {
  c[i] = a[i]*b[i];
}

這節省了全部涉及解釋Python代碼和操做Python對象的開銷,但沒有了使用Python編碼的優點。此外,編碼所需的工做量隨數據維數的增長而增長。例如對於一個二維數組,C代碼(像上面同樣簡寫)會擴展爲:

for (i = 0; i < rows; i++): {
  for (j = 0; j < columns; j++): {
    c[i][j] = a[i][j]*b[i][j];
  }
}

NumPy綜合了兩種狀況的優勢:元素級別的操做是ndarray的「默認模式」,而它又經過執行預編譯的C代碼來加速。在NumPy中:

c = a * b

的行爲像以前的例子同樣,幾近於C語言的速度,可是代碼正如咱們指望中的那樣,就像標準的Python同樣簡潔。實際上,NumPy的風格還能更簡潔!最後這個例子說明了NumPy的兩個特性:向量化(Vectorization)和廣播(Broadcasting),它們是NumPy強大之處的基礎。

向量化用於描述任何缺失的顯式循環、索引及其它,在代碼這些事情是即時發生的,固然,是在「幕後」(預編譯的C代碼中)優化。向量化編碼的優勢不少,好比:

  • 向量化的代碼更簡潔易讀

  • 代碼更少通常意味着更少的錯誤

  • 代碼更像標準的數學符號(一般狀況下,更容易編寫數學結構)

  • 向量化的結果更加「Pythonic」。沒有向量化,咱們的代碼會更加低效,循環也難以閱讀。

廣播是描述隱式的元素級操做的術語;通常來講,NumPy中全部操做,並不僅是算術運算,還有邏輯運算,位運算,函數運算等,以這種隱式的元素層面的方式執行,就是廣播。此外,在上面的例子中,a 和 b 能夠是相同形狀的多維數組,或者一個標量和一個數組;甚至能夠是不一樣的形狀的2個數組,假設較小的數組能夠以產生明確廣播的方式,擴展爲較大數組的尺寸。詳細規則見 numpy.doc.broadcasting

NumPy徹底支持ndarray的面向對象。例如,ndarray是一個類,擁有許多方法和屬性。它的許多方法複製了NumPy最外層命名空間的函數,讓程序員徹底自由決定代碼寫成哪一個範式,以及哪一個範式更適合當前的任務。

1.2 安裝 NumPy

原文:Installing NumPy

大多數狀況下,在系統上安裝NumPy的最好辦法是使用爲你的操做系統預編譯的包。

一些可選的鏈接請見 http://scipy.org/install.html

有關源碼包構建的說明,請見從源碼中構建。這些信息主要用於高級用戶。

相關文章
相關標籤/搜索