摘要:包的核心是對象。但有個例外,包括對象數組的元素大小是不同的。序列大小和速度在科學計算中尤為重要。例如考慮兩個長度相同的列表中每個元素相乘的情況。此外,編碼所需的工作量隨數據維數的增加而增加。這些信息主要用于高級用戶。
1.1 NumPy 是什么?譯者:飛龍
原文:What is 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數組。
序列大小和速度在科學計算中尤為重要。例如考慮兩個長度相同的列表中每個元素相乘的情況。如果數據被存儲在兩個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)和廣播(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 。
有關源碼包構建的說明,請見從源碼中構建。這些信息主要用于高級用戶。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37828.html
摘要:整體進度貢獻指南項目倉庫貢獻指南請您勇敢地去翻譯和改進翻譯。然后回復,注明章節號一定要留。二校對需要校對語法術語使用文檔格式如果覺得現有翻譯不好,重新翻譯也是可以的。三提交項目將譯文放在文件夾下請見入門指南。 整體進度:https://github.com/apachecn/c... 貢獻指南:https://github.com/apachecn/c... 項目倉庫:https://...
摘要:上一篇文章的地址利用進行識別相似圖片一安裝官網在進行下一步操作時,我們需要安裝,本來安裝的步驟跟平常安裝其他模塊一樣,而然由于的歷史原因用過都懂,弄得一點都不友好。 前言 和網上各種首先你要有一個女朋友的系列一樣,想進行人臉判斷,首先要有臉,只要能靠確定人臉的位置,那么進行兩張人臉是否相似的操作便迎刃而解了。 所以本篇文章著重講述如何利用openCV定位人臉。 上一篇文章的地址: 利用...
摘要:將以指定數量的元素創建數組,并平分開始值和結束值。將創建數組的集合用一維數組來模擬高維數組,每一維都有表示它的變量。一個例子說明比口頭描述好得多計算規則網格上的高維函數時,這會非常有用。 原文:Array creation 譯者:飛龍 ? 另見 數組創建例程 導言 數組創建的一般機制有五種: 從其它Python的結構轉換(如列表和元組) 內置的NumPy數組創建對象(如 ar...
摘要:其他數據類型在中沒有對應。因此,使用數組標量確保了數組和標量之間具有相同的行為,無論值在不在數組中。不提供比的精度更高的特別是位四精度數據類型的是不能用的。 原文:Data types 譯者:飛龍 ? 另見 數據類型對象 數組類型和類型之間的轉換 NumPy支持的數值類型比Python更多。這一節會講述所有可用的類型,以及如何改變數組的數據類型。 數據類型 描述 bo...
安裝與使用 大型矩陣運算主要用matlab或者sage等專業的數學工具,但我這里要講講python中numpy,用來做一些日常簡單的矩陣運算!這是 numpy官方文檔,英文不太熟悉的,還有 numpy中文文檔 numpy 同時支持 python3 和 python2,在 python3 下直接pip install安裝即可,python2 的話建議用 .whl 安裝,你可以在 這里查詢 和你 py...
閱讀 1534·2023-04-26 02:50
閱讀 3535·2023-04-26 00:28
閱讀 1931·2023-04-25 15:18
閱讀 3209·2021-11-24 10:31
閱讀 986·2019-08-30 13:00
閱讀 1000·2019-08-29 15:19
閱讀 1766·2019-08-29 13:09
閱讀 2975·2019-08-29 13:06