摘要:下文統(tǒng)一稱(chēng)為數(shù)組是存儲(chǔ)單一數(shù)據(jù)類(lèi)型的多維數(shù)組同語(yǔ)言數(shù)組直接保存數(shù)值而則是能夠?qū)?shù)組進(jìn)行處理的函數(shù)。動(dòng)態(tài)數(shù)據(jù)類(lèi)型與的數(shù)組和的這些不可變數(shù)據(jù)類(lèi)型的適用場(chǎng)景等可變數(shù)據(jù)類(lèi)型適用于需要不斷對(duì)原始數(shù)據(jù)進(jìn)行修改的場(chǎng)景。
Numpy,是python中的一個(gè)矩陣計(jì)算包,功能類(lèi)似matlab的矩陣計(jì)算。Numpy的誕生彌補(bǔ)了下面提到的兩項(xiàng)的不足,numpy提供了兩種基本的對(duì)象:ndarray(N-dimensional array object)和ufunc(universal function object)。Ndarray(下文統(tǒng)一稱(chēng)為數(shù)組)是存儲(chǔ)單一數(shù)據(jù)類(lèi)型的多維數(shù)組(同C語(yǔ)言數(shù)組直接保存數(shù)值),而ufunc則是能夠?qū)?shù)組進(jìn)行處理的函數(shù)。
Numpy和pandas有什么關(guān)系呢,numpy是做數(shù)據(jù)計(jì)算,pandas是做數(shù)據(jù)處理,pandas是在numpy的基礎(chǔ)上,處理的類(lèi)似excel和數(shù)據(jù)庫(kù)的記錄,比如多了index和column。
那么我們?yōu)槭裁匆獙W(xué)習(xí)numpy呢,通常情況下我們獲取數(shù)據(jù)的方式不同,得到的數(shù)據(jù)的各式就會(huì)多種多樣,比如:文檔集合、圖像集合、聲音片段集合等等。雖然這些數(shù)據(jù)存在明顯的異構(gòu)性,但將他們都處理或者看做為數(shù)字?jǐn)?shù)組時(shí),就會(huì)更易于理解和處理。舉個(gè)例子:
聲音片段:可以看作為時(shí)間和強(qiáng)度的一位數(shù)組
圖像集合:可以看做存儲(chǔ)不同區(qū)域像素值的二維數(shù)組
文本:可以通過(guò)各種方式處理成數(shù)值數(shù)組形式的可分析數(shù)據(jù)。
因此,學(xué)會(huì)高效的存儲(chǔ)和操作數(shù)組是我們進(jìn)行數(shù)據(jù)科學(xué)學(xué)習(xí)的絕對(duì)基礎(chǔ)過(guò)程。雖然在某種程度上,Numpy數(shù)組與python內(nèi)置的列表類(lèi)型十分相似。但是隨著數(shù)組在維度上不斷變大,Numpy數(shù)組供了更強(qiáng)大的、更高效的存儲(chǔ)和數(shù)值操作。Numpy幾乎是整個(gè)python數(shù)據(jù)科學(xué)工具生態(tài)系統(tǒng)的核心。因此,不管我們對(duì)數(shù)據(jù)科學(xué)的哪個(gè)方面感興趣,多花點(diǎn)時(shí)間去學(xué)習(xí)高效實(shí)用Numpy,都是很值得且必要的。
Numpy是什么
概念:簡(jiǎn)單來(lái)說(shuō),numpy是python的一個(gè)科學(xué)計(jì)算包,包含了多維數(shù)組以及多位數(shù)組的操作。
核心:numpy的核心是ndarray對(duì)象,這個(gè)對(duì)象封裝了同質(zhì)數(shù)據(jù)類(lèi)型的n維數(shù)組
ndarray與python中原生的array有什么區(qū)別:
NumPy 數(shù)組在創(chuàng)建時(shí)有固定的大小,不同于Python列表(可以動(dòng)態(tài)增長(zhǎng))。更改ndarray的大小將創(chuàng)建一個(gè)新的數(shù)組并刪除原始數(shù)據(jù)。
NumPy 數(shù)組中的元素都需要具有相同的數(shù)據(jù)類(lèi)型,因此在存儲(chǔ)器中將具有相同的大小。數(shù)組的元素如果也是數(shù)組(可以是 Python 的原生 array,也可以是 ndarray)的情況下,則構(gòu)成了多維數(shù)組。
NumPy 數(shù)組便于對(duì)大量數(shù)據(jù)進(jìn)行高級(jí)數(shù)學(xué)和其他類(lèi)型的操作。通常,這樣的操作比使用Python的內(nèi)置序列可能更有效和更少的代碼執(zhí)行。
越來(lái)越多的用python做數(shù)據(jù)科學(xué)和數(shù)學(xué)相關(guān)的工作者都開(kāi)始使用NumPy的ndarray數(shù)組代替python原生的array數(shù)組,所以學(xué)會(huì) Numpy 的使用是必要的 。
2、查看python中numpy的功能與內(nèi)容
首先導(dǎo)入numpy
查看numpy的幫助文檔
也可以通過(guò)兩個(gè)??查看更詳細(xì)的幫助文檔
二、python原生數(shù)組與numpy數(shù)組的區(qū)別與聯(lián)系
1、對(duì)比Python數(shù)據(jù)類(lèi)型和numpy數(shù)組做元素計(jì)算對(duì)比
如果想要將一個(gè)2-D數(shù)組 a 的每個(gè)元素與長(zhǎng)度相同的另外一個(gè)數(shù)組 b 中相應(yīng)位置的元素相乘,使用 Python 原生的數(shù)組實(shí)現(xiàn)如下:
需要使用列表流程:
初始化一個(gè)列表
將需要迭代的元素放在一個(gè)可迭代對(duì)象中
在用遍歷的方式進(jìn)行運(yùn)行
輸入運(yùn)行結(jié)果
但是如果使用numpy實(shí)現(xiàn)的話(huà),可以直接使用矢量化功能:
首先將導(dǎo)入numpy模塊
將原生數(shù)組轉(zhuǎn)化為ndarray數(shù)組
然后就可以直接進(jìn)行運(yùn)算了
矢量化代碼有很多優(yōu)點(diǎn),其中包括:
矢量化代碼更簡(jiǎn)潔易讀
更少的代碼行通常意味著更少的錯(cuò)誤
該代碼更接近地類(lèi)似于標(biāo)準(zhǔn)數(shù)學(xué)符號(hào)(使得更容易,通常,以正確地編碼數(shù)學(xué)構(gòu)造)
矢量化導(dǎo)致更多的“Pythonic”代碼。如果沒(méi)有向量化,我們的代碼將會(huì)效率很低,難以讀取for循環(huán)。
要實(shí)現(xiàn)高效的數(shù)據(jù)驅(qū)動(dòng)科學(xué)和計(jì)算,需要理解數(shù)據(jù)是如何被存儲(chǔ)和操作的。接下來(lái)的內(nèi)容,我們會(huì)對(duì)比python語(yǔ)言處理數(shù)組的過(guò)程,找出numpy的改進(jìn)之處,這將是我們理解numpy的基礎(chǔ)。
python用戶(hù)往往是被其易用性所吸引,其中一個(gè)易用指出就在于動(dòng)態(tài)輸入。不同于C語(yǔ)言和Java,python在引用和定義變量之前不用提前指定變量類(lèi)型。python變量的類(lèi)型來(lái)源于我們所賦的值的類(lèi)型。我們可以這樣去理解:
在C語(yǔ)言中和python中,變量的存儲(chǔ)形式如下:
直觀來(lái)說(shuō),就相當(dāng)于pythpn存儲(chǔ)數(shù)據(jù)的時(shí)候,需要耗費(fèi)一定的內(nèi)存去存儲(chǔ)和數(shù)據(jù)相關(guān)的信息。而這些信息是C語(yǔ)言的寫(xiě)成的,而當(dāng)我們?nèi)バ薷淖兞康闹禃r(shí),相當(dāng)于重新創(chuàng)建了一個(gè)變量,會(huì)在自動(dòng)跑一遍C的底層代碼,將數(shù)據(jù)所有信息更新,而這些底層代碼很復(fù)雜,不需要我們?nèi)?xiě),而是在python設(shè)計(jì)之初就已經(jīng)全部寫(xiě)好,我們只要去執(zhí)行變量賦值的操作就ok。這也是python好用的點(diǎn)之一。
那我們現(xiàn)在就可以看看變量賦值這個(gè)python功能背后的高效C語(yǔ)言的的偽代碼:
一個(gè)引用計(jì)數(shù),幫助python默默分配和處理內(nèi)存以及分配和回收。
將變量的類(lèi)型編碼(type)
指定接下來(lái)的數(shù)據(jù)成員大小(len)
實(shí)際的整型值
而上述說(shuō)到的除了值的額外信息,都存儲(chǔ)在我們上述圖片的PyObject_HEAD中。
2、列表和數(shù)組的區(qū)別于聯(lián)系
列表和數(shù)組都是用來(lái)存儲(chǔ)一些列的元素的,不同點(diǎn)在于,數(shù)組這個(gè)容器要求當(dāng)中的元素必須保持同一數(shù)據(jù)類(lèi)型,且是數(shù)字,而列表就不一樣了,可以容納多種不同的數(shù)據(jù)類(lèi)型。
但我們?cè)陂_(kāi)篇有說(shuō)到,當(dāng)我們將數(shù)據(jù)處理成數(shù)值時(shí),方便計(jì)算和其他操作。這個(gè)時(shí)候,我們需要的容器只要可以存儲(chǔ)數(shù)值就可以,使用列表則或耗費(fèi)一定的空間去存儲(chǔ)每一個(gè)元素的“其他信息”,但當(dāng)所有的元素都是數(shù)值時(shí),這種存儲(chǔ)方式顯然不夠高效。
下面我們舉個(gè)例子說(shuō)明:
從代碼結(jié)果可以看出,列表中每一個(gè)元素的類(lèi)型都是不同的,所以列表需要耗費(fèi)一定的空間去存儲(chǔ)這些信息,當(dāng)數(shù)據(jù)很大的時(shí)候這種方式顯然會(huì)拖慢運(yùn)行的速度。
這樣,我們就會(huì)發(fā)現(xiàn),列表中每一個(gè)元素對(duì)存儲(chǔ)著各自的類(lèi)型信息,各自都是一個(gè)完整的對(duì)象。但是,容器中所有的元素都是一個(gè)類(lèi)型時(shí),顯然這種存儲(chǔ)方式不合適。但不得不說(shuō),這是我們的動(dòng)態(tài)數(shù)據(jù)類(lèi)型必須付出的代價(jià)。
動(dòng)態(tài)數(shù)據(jù)類(lèi)型與python的array數(shù)組和Numpy的ndarray這些不可變數(shù)據(jù)類(lèi)型的適用場(chǎng)景:
list等可變數(shù)據(jù)類(lèi)型適用于需要不斷對(duì)原始數(shù)據(jù)進(jìn)行修改的場(chǎng)景。修改時(shí)的操作在原始數(shù)據(jù)的本身進(jìn)行。
array、ndarray這種不靈活的數(shù)據(jù)類(lèi)型,適用于我們想要保護(hù)原始數(shù)據(jù)不被修改的場(chǎng)景。當(dāng)對(duì)原始數(shù)組進(jìn)行修改操作時(shí),會(huì)自動(dòng)新建一個(gè)數(shù)組。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/43605.html
摘要:中的和中的矩陣分析由于之前在做的源碼學(xué)習(xí),并且將其的源碼翻譯成了的版本。在逛知乎里,我又發(fā)現(xiàn)了很多關(guān)于為什么這么快的討論,很有意思。作者鏈接來(lái)源知乎著作權(quán)歸作者所有。 python中的list和numpy中的矩陣分析 Author : Jasper Yang School : Bupt preface 由于之前在做GIbbsLDA++的源碼學(xué)習(xí),并且將其c++的源碼翻譯成了pyth...
小編寫(xiě)這篇文章的主要目的,主要是給大家進(jìn)行介紹,關(guān)于NumPy與Python內(nèi)置列表計(jì)算標(biāo)準(zhǔn)差區(qū)別的相關(guān)介紹,希望可以給各位讀者帶來(lái)幫助。 1什么是Numpy NumPy,是NumericalPython的通稱(chēng),用以性能卓越計(jì)算機(jī)的應(yīng)用和數(shù)據(jù)統(tǒng)計(jì)分析的前提包,像數(shù)理科學(xué)專(zhuān)用工具(pandas)和架構(gòu)(Scikit-learn)中都采用上了NumPy這個(gè)包。 NumPy中的基本數(shù)據(jù)結(jié)構(gòu)是n...
摘要:話(huà)接上文的簡(jiǎn)單推導(dǎo),這篇文章我們來(lái)看單類(lèi)。單分類(lèi)方法常用于異常檢測(cè),或者類(lèi)別極度不平衡的分類(lèi)任務(wù)中。另一種思路就是,在樣本空間中為此類(lèi)數(shù)據(jù)劃定一個(gè)大致的邊界。上式表明所有樣本的權(quán)重之和為,而球心是所有樣本的加權(quán)和。 話(huà)接上文(SVM的簡(jiǎn)單推導(dǎo)),這篇文章我們來(lái)看單類(lèi)SVM:SVDD。可能大家會(huì)覺(jué)得很奇怪,我們?yōu)槭裁葱枰獑畏诸?lèi)呢?有篇博客舉了一個(gè)很有意思的例子。 花果山上的老猴子,一生閱...
小編寫(xiě)這篇文章的目的,主要是給大家來(lái)做一個(gè)比較詳細(xì)的解答,解答一下其具體的相關(guān)知識(shí),還有一些相關(guān)的代碼解析,下面就給大家進(jìn)行一個(gè)比較詳細(xì)的解答。 什么是Numpy NumPy,是Numerical Python的簡(jiǎn)稱(chēng),用于性能比較高的基礎(chǔ)分析數(shù)據(jù)包,可以對(duì)其進(jìn)行用來(lái)進(jìn)行數(shù)據(jù)分析,像數(shù)學(xué)科學(xué)工具(pandas)和框架(Scikit-learn)中都使用到了NumPy這個(gè)包。 NumPy中的...
摘要:前言對(duì)的意義非凡,在數(shù)據(jù)分析與機(jī)器學(xué)習(xí)領(lǐng)域?yàn)榱⑾铝撕柜R功勞。現(xiàn)在用搞數(shù)據(jù)分析或機(jī)器學(xué)習(xí)經(jīng)常使用的等庫(kù),都需要基于構(gòu)建。毫不夸張地說(shuō),沒(méi)有,今天在數(shù)據(jù)分析與機(jī)器學(xué)習(xí)領(lǐng)域只能是捉襟見(jiàn)肘。 前言 numpy對(duì)python的意義非凡,在數(shù)據(jù)分析與機(jī)器學(xué)習(xí)領(lǐng)域?yàn)閜ython立下了汗馬功勞。現(xiàn)在用python搞數(shù)據(jù)分析或機(jī)器學(xué)習(xí)經(jīng)常使用的pandas、matplotlib、sklearn等庫(kù),都需...
閱讀 1074·2021-11-19 09:40
閱讀 2213·2021-11-15 18:00
閱讀 1267·2021-10-18 13:34
閱讀 2248·2021-09-02 15:40
閱讀 1533·2019-08-30 14:01
閱讀 1113·2019-08-30 11:11
閱讀 2482·2019-08-29 15:26
閱讀 722·2019-08-29 14:15