摘要:包的核心是對(duì)象。但有個(gè)例外,包括對(duì)象數(shù)組的元素大小是不同的。序列大小和速度在科學(xué)計(jì)算中尤為重要。例如考慮兩個(gè)長(zhǎng)度相同的列表中每個(gè)元素相乘的情況。此外,編碼所需的工作量隨數(shù)據(jù)維數(shù)的增加而增加。這些信息主要用于高級(jí)用戶。
1.1 NumPy 是什么?譯者:飛龍
原文:What is NumPy?
NumPy是Python中用于科學(xué)計(jì)算的基礎(chǔ)包。它是一個(gè)Python庫(kù),提供多維數(shù)組對(duì)象,各種派生的對(duì)象(如掩碼數(shù)組和矩陣),以及數(shù)組快速操作的各種各樣的例程,包括數(shù)學(xué)、邏輯、圖形操作,排序、選擇、I/O、離散傅里葉變換、基本線性代數(shù)、基本統(tǒng)計(jì)操作,隨機(jī)模擬以及其他。
NumPy包的核心是ndarray對(duì)象。它封裝了均勻數(shù)據(jù)類(lèi)型的n維數(shù)組,帶有一些在編譯過(guò)的代碼中執(zhí)行的操作。NumPy數(shù)組和Python標(biāo)準(zhǔn)列表有一些重要的差異:
NumPy數(shù)組在創(chuàng)建時(shí)有固定的大小,不像Python列表(可動(dòng)態(tài)增長(zhǎng))。改變一個(gè)ndarray的大小將創(chuàng)建一個(gè)新數(shù)組,并刪除原有數(shù)組。
NumPy數(shù)組中的元素都必須是相同的數(shù)據(jù)類(lèi)型,從而具有相同的內(nèi)存大小。但有個(gè)例外:(Python,包括NumPy)對(duì)象數(shù)組的元素大小是不同的。
NumPy數(shù)組使大量數(shù)據(jù)上的高級(jí)數(shù)學(xué)運(yùn)算和其他類(lèi)型的操作變得容易。通常情況下,這樣的操作可能比使用Python的內(nèi)置列表效率更高,執(zhí)行的代碼更少。
越來(lái)越多的基于Python的科學(xué)和數(shù)學(xué)包使用NumPy數(shù)組;雖然它們通常支持Python列表作為輸入,但他們會(huì)在處理之前將這些輸入轉(zhuǎn)換為NumPy數(shù)組,并總是輸出NumPy數(shù)組。換句話說(shuō),為了高效使用許多(也許甚至是大多數(shù))當(dāng)今基于Python的科學(xué)/數(shù)學(xué)軟件,只要知道如何使用Python的內(nèi)置列表類(lèi)型是不夠的————你還需要知道如何使用NumPy數(shù)組。
序列大小和速度在科學(xué)計(jì)算中尤為重要。例如考慮兩個(gè)長(zhǎng)度相同的列表中每個(gè)元素相乘的情況。如果數(shù)據(jù)被存儲(chǔ)在兩個(gè)Python列表 a 和 b 中,我們可以這樣遍歷每個(gè)元素:
c = [] for i in range(len(a)): c.append(a[i]*b[i])
這就產(chǎn)生了正確的答案,但如果 a 和 b 都含有數(shù)以百萬(wàn)計(jì)的數(shù)字,我們將為Python的低效循環(huán)付出代價(jià)。我們可以這樣以C語(yǔ)言編寫(xiě)代碼來(lái)完成同樣的任務(wù)(為清楚起見(jiàn)我們忽略變量聲明和初始化、內(nèi)存分配等):
for (i = 0; i < rows; i++): { c[i] = a[i]*b[i]; }
這節(jié)省了所有涉及解釋Python代碼和操作Python對(duì)象的開(kāi)銷(xiāo),但沒(méi)有了使用Python編碼的優(yōu)勢(shì)。此外,編碼所需的工作量隨數(shù)據(jù)維數(shù)的增加而增加。例如對(duì)于一個(gè)二維數(shù)組,C代碼(像上面一樣簡(jiǎn)寫(xiě))會(huì)擴(kuò)展為:
for (i = 0; i < rows; i++): { for (j = 0; j < columns; j++): { c[i][j] = a[i][j]*b[i][j]; } }
NumPy綜合了兩種情況的優(yōu)點(diǎn):元素級(jí)別的操作是ndarray的“默認(rèn)模式”,而它又通過(guò)執(zhí)行預(yù)編譯的C代碼來(lái)加速。在NumPy中:
c = a * b
的行為像之前的例子一樣,幾近于C語(yǔ)言的速度,但是代碼正如我們期望中的那樣,就像標(biāo)準(zhǔn)的Python一樣簡(jiǎn)潔。實(shí)際上,NumPy的風(fēng)格還能更簡(jiǎn)潔!最后這個(gè)例子說(shuō)明了NumPy的兩個(gè)特性:向量化(Vectorization)和廣播(Broadcasting),它們是NumPy強(qiáng)大之處的基礎(chǔ)。
向量化用于描述任何缺失的顯式循環(huán)、索引及其它,在代碼這些事情是即時(shí)發(fā)生的,當(dāng)然,是在“幕后”(預(yù)編譯的C代碼中)優(yōu)化。向量化編碼的優(yōu)點(diǎn)很多,比如:
向量化的代碼更簡(jiǎn)潔易讀
代碼更少一般意味著更少的錯(cuò)誤
代碼更像標(biāo)準(zhǔn)的數(shù)學(xué)符號(hào)(通常情況下,更容易編寫(xiě)數(shù)學(xué)結(jié)構(gòu))
向量化的結(jié)果更加“Pythonic”。沒(méi)有向量化,我們的代碼會(huì)更加低效,循環(huán)也難以閱讀。
廣播是描述隱式的元素級(jí)操作的術(shù)語(yǔ);一般來(lái)說(shuō),NumPy中所有操作,并不只是算術(shù)運(yùn)算,還有邏輯運(yùn)算,位運(yùn)算,函數(shù)運(yùn)算等,以這種隱式的元素層面的方式執(zhí)行,就是廣播。此外,在上面的例子中,a 和 b 可以是相同形狀的多維數(shù)組,或者一個(gè)標(biāo)量和一個(gè)數(shù)組;甚至可以是不同的形狀的2個(gè)數(shù)組,假設(shè)較小的數(shù)組可以以產(chǎn)生明確廣播的方式,擴(kuò)展為較大數(shù)組的尺寸。詳細(xì)規(guī)則見(jiàn) numpy.doc.broadcasting。
NumPy完全支持ndarray的面向?qū)ο?。例如,ndarray是一個(gè)類(lèi),擁有許多方法和屬性。它的許多方法復(fù)制了NumPy最外層命名空間的函數(shù),讓程序員完全自由決定代碼寫(xiě)成哪個(gè)范式,以及哪個(gè)范式更適合當(dāng)前的任務(wù)。
1.2 安裝 NumPy原文:Installing NumPy
大多數(shù)情況下,在系統(tǒng)上安裝NumPy的最好辦法是使用為你的操作系統(tǒng)預(yù)編譯的包。
一些可選的連接請(qǐng)見(jiàn) http://scipy.org/install.html 。
有關(guān)源碼包構(gòu)建的說(shuō)明,請(qǐng)見(jiàn)從源碼中構(gòu)建。這些信息主要用于高級(jí)用戶。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37828.html
摘要:整體進(jìn)度貢獻(xiàn)指南項(xiàng)目倉(cāng)庫(kù)貢獻(xiàn)指南請(qǐng)您勇敢地去翻譯和改進(jìn)翻譯。然后回復(fù),注明章節(jié)號(hào)一定要留。二校對(duì)需要校對(duì)語(yǔ)法術(shù)語(yǔ)使用文檔格式如果覺(jué)得現(xiàn)有翻譯不好,重新翻譯也是可以的。三提交項(xiàng)目將譯文放在文件夾下請(qǐng)見(jiàn)入門(mén)指南。 整體進(jìn)度:https://github.com/apachecn/c... 貢獻(xiàn)指南:https://github.com/apachecn/c... 項(xiàng)目倉(cāng)庫(kù):https://...
摘要:上一篇文章的地址利用進(jìn)行識(shí)別相似圖片一安裝官網(wǎng)在進(jìn)行下一步操作時(shí),我們需要安裝,本來(lái)安裝的步驟跟平常安裝其他模塊一樣,而然由于的歷史原因用過(guò)都懂,弄得一點(diǎn)都不友好。 前言 和網(wǎng)上各種首先你要有一個(gè)女朋友的系列一樣,想進(jìn)行人臉判斷,首先要有臉,只要能靠確定人臉的位置,那么進(jìn)行兩張人臉是否相似的操作便迎刃而解了。 所以本篇文章著重講述如何利用openCV定位人臉。 上一篇文章的地址: 利用...
摘要:將以指定數(shù)量的元素創(chuàng)建數(shù)組,并平分開(kāi)始值和結(jié)束值。將創(chuàng)建數(shù)組的集合用一維數(shù)組來(lái)模擬高維數(shù)組,每一維都有表示它的變量。一個(gè)例子說(shuō)明比口頭描述好得多計(jì)算規(guī)則網(wǎng)格上的高維函數(shù)時(shí),這會(huì)非常有用。 原文:Array creation 譯者:飛龍 ? 另見(jiàn) 數(shù)組創(chuàng)建例程 導(dǎo)言 數(shù)組創(chuàng)建的一般機(jī)制有五種: 從其它Python的結(jié)構(gòu)轉(zhuǎn)換(如列表和元組) 內(nèi)置的NumPy數(shù)組創(chuàng)建對(duì)象(如 ar...
摘要:其他數(shù)據(jù)類(lèi)型在中沒(méi)有對(duì)應(yīng)。因此,使用數(shù)組標(biāo)量確保了數(shù)組和標(biāo)量之間具有相同的行為,無(wú)論值在不在數(shù)組中。不提供比的精度更高的特別是位四精度數(shù)據(jù)類(lèi)型的是不能用的。 原文:Data types 譯者:飛龍 ? 另見(jiàn) 數(shù)據(jù)類(lèi)型對(duì)象 數(shù)組類(lèi)型和類(lèi)型之間的轉(zhuǎn)換 NumPy支持的數(shù)值類(lèi)型比Python更多。這一節(jié)會(huì)講述所有可用的類(lèi)型,以及如何改變數(shù)組的數(shù)據(jù)類(lèi)型。 數(shù)據(jù)類(lèi)型 描述 bo...
安裝與使用 大型矩陣運(yùn)算主要用matlab或者sage等專(zhuān)業(yè)的數(shù)學(xué)工具,但我這里要講講python中numpy,用來(lái)做一些日常簡(jiǎn)單的矩陣運(yùn)算!這是 numpy官方文檔,英文不太熟悉的,還有 numpy中文文檔 numpy 同時(shí)支持 python3 和 python2,在 python3 下直接pip install安裝即可,python2 的話建議用 .whl 安裝,你可以在 這里查詢(xún) 和你 py...
閱讀 1548·2023-04-26 02:50
閱讀 3553·2023-04-26 00:28
閱讀 1940·2023-04-25 15:18
閱讀 3225·2021-11-24 10:31
閱讀 999·2019-08-30 13:00
閱讀 1007·2019-08-29 15:19
閱讀 1777·2019-08-29 13:09
閱讀 2984·2019-08-29 13:06