您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關python中numpy指的是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
NumPy是Python中科學計算的基礎包。它是一個Python庫,提供多維數組對象,各種派生對象(如掩碼數組和矩陣),以及用于數組快速操作的各種例程,包括數學,邏輯,形狀操作,排序,選擇,I / O離散傅立葉變換,基本線性代數,基本統計運算,隨機模擬等等。
NumPy包的核心是ndarray對象。這封裝了同構數據類型的n維數組,許多操作在編譯代碼中執行以提高性能。NumPy數組和標準Python序列之間有幾個重要的區別:
·NumPy數組在創建時具有固定大小,與Python列表(可以動態增長)不同。更改ndarray的大小將創建一個新數組并刪除原始數組。
·NumPy數組中的元素都需要具有相同的數據類型,因此在內存中的大小相同。例外:可以有(Python,包括NumPy)對象的數組,從而允許不同大小的元素的數組。
·NumPy數組有助于對大量數據進行高級數學和其他類型的操作。通常,與使用Python的內置序列相比,這些操作的執行效率更高,代碼更少。
·越來越多的基于Python的科學和數學軟件包正在使用NumPy數組; 雖然這些通常支持Python序列輸入,但它們在處理之前將這些輸入轉換為NumPy數組,并且它們通常輸出NumPy數組。換句話說,為了有效地使用當今大量(甚至大多數)基于Python的科學/數學軟件,只知道如何使用Python的內置序列類型是不夠的 - 還需要知道如何使用NumPy數組。
關于序列大小和速度的要點在科學計算中尤為重要。作為一個簡單的例子,考慮將1-D序列中的每個元素與相同長度的另一個序列中的相應元素相乘的情況。如果數據被存儲在兩個Python列表,a并且b,我們可以遍歷每個元素:
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描述了代碼中沒有任何顯式循環,索引等 - 這些事情當然只是在優化的,預編譯的C代碼中“幕后”。矢量化代碼有許多優點,其中包括:
·矢量化代碼更簡潔,更易于閱讀
·更少的代碼行通常意味著更少的錯誤
·代碼更接近于標準的數學符號(通常,更容易,正確編碼數學結構)
·矢量化導致更多“Pythonic”代碼。如果沒有矢量化,我們的代碼就會被低效且難以閱讀的for循環所困擾。
廣播是用于描述操作的隱式逐元素行為的術語;一般來說,在NumPy中,所有操作,不僅僅是算術運算,而是邏輯,位,功能等,都以這種隱式的逐元素方式表現,即它們進行廣播。此外,在上面的例子中,a并且b可以是相同形狀的多維陣列,或者標量和陣列,或者甚至是具有不同形狀的兩個陣列,條件是較小的陣列可以“擴展”到更大的形狀。結果廣播明確無誤的方式。有關廣播的詳細“規則”,請參閱numpy.doc.broadcasting。
NumPy完全支持面向對象的方法,再次使用ndarray開始。例如,ndarray是一個類,擁有許多方法和屬性。它的許多方法都在最外層的NumPy命名空間中鏡像函數,使程序員可以完全自由地編寫她喜歡的范例和/或最適合手頭任務的范例。
關于python中numpy指的是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。