免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
真假美猴王-Numpy數(shù)據(jù)與Python數(shù)組的區(qū)別與聯(lián)系

Numpy,是python中的一個(gè)矩陣計(jì)算包,功能類似matlab的矩陣計(jì)算。Numpy的誕生彌補(bǔ)了下面提到的兩項(xiàng)的不足,numpy提供了兩種基本的對(duì)象:ndarray(N-dimensional array object)和ufunc(universal function object)。Ndarray(下文統(tǒng)一稱為數(shù)組)是存儲(chǔ)單一數(shù)據(jù)類型的多維數(shù)組(同C語言數(shù)組直接保存數(shù)值),而ufunc則是能夠?qū)?shù)組進(jìn)行處理的函數(shù)。

Numpy和pandas有什么關(guān)系呢,numpy是做數(shù)據(jù)計(jì)算,pandas是做數(shù)據(jù)處理,pandas是在numpy的基礎(chǔ)上,處理的類似excel和數(shù)據(jù)庫的記錄,比如多了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ù)組

文本:可以通過各種方式處理成數(shù)值數(shù)組形式的可分析數(shù)據(jù)。

因此,學(xué)會(huì)高效的存儲(chǔ)和操作數(shù)組是我們進(jìn)行數(shù)據(jù)科學(xué)學(xué)習(xí)的絕對(duì)基礎(chǔ)過程。雖然在某種程度上,Numpy數(shù)組與python內(nè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)單來說,numpy是python的一個(gè)科學(xué)計(jì)算包,包含了多維數(shù)組以及多位數(shù)組的操作。

核心:numpy的核心是ndarray對(duì)象,這個(gè)對(duì)象封裝了同質(zhì)數(shù)據(jù)類型的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ù)類型,因此在存儲(chǔ)器中將具有相同的大小。數(shù)組的元素如果也是數(shù)組(可以是 Python 的原生 array,也可以是 ndarray)的情況下,則構(gòu)成了多維數(shù)組。

NumPy 數(shù)組便于對(duì)大量數(shù)據(jù)進(jìn)行高級(jí)數(shù)學(xué)和其他類型的操作。通常,這樣的操作比使用Python的內(nèi)置序列可能更有效和更少的代碼執(zhí)行。

越來越多的用python做數(shù)據(jù)科學(xué)和數(shù)學(xué)相關(guān)的工作者都開始使用NumPy的ndarray數(shù)組代替python原生的array數(shù)組,所以學(xué)會(huì) Numpy 的使用是必要的 。

2、查看python中numpy的功能與內(nèi)容

首先導(dǎo)入numpy

查看numpy的幫助文檔

也可以通過兩個(gè)??查看更詳細(xì)的幫助文檔

二、python原生數(shù)組與numpy數(shù)組的區(qū)別與聯(lián)系

1、對(duì)比Python數(shù)據(jù)類型和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)的話,可以直接使用矢量化功能:

首先將導(dǎo)入numpy模塊

將原生數(shù)組轉(zhuǎn)化為ndarray數(shù)組

然后就可以直接進(jìn)行運(yùn)算了

矢量化代碼有很多優(yōu)點(diǎn),其中包括:

矢量化代碼更簡(jiǎn)潔易讀

更少的代碼行通常意味著更少的錯(cuò)誤

該代碼更接近地類似于標(biāo)準(zhǔn)數(shù)學(xué)符號(hào)(使得更容易,通常,以正確地編碼數(shù)學(xué)構(gòu)造)

矢量化導(dǎo)致更多的“Pythonic”代碼。如果沒有向量化,我們的代碼將會(huì)效率很低,難以讀取for循環(huán)。

要實(shí)現(xiàn)高效的數(shù)據(jù)驅(qū)動(dòng)科學(xué)和計(jì)算,需要理解數(shù)據(jù)是如何被存儲(chǔ)和操作的。接下來的內(nèi)容,我們會(huì)對(duì)比python語言處理數(shù)組的過程,找出numpy的改進(jìn)之處,這將是我們理解numpy的基礎(chǔ)。

python用戶往往是被其易用性所吸引,其中一個(gè)易用指出就在于動(dòng)態(tài)輸入。不同于C語言和Java,python在引用和定義變量之前不用提前指定變量類型。python變量的類型來源于我們所賦的值的類型。我們可以這樣去理解:

在C語言中和python中,變量的存儲(chǔ)形式如下:

直觀來說,就相當(dāng)于pythpn存儲(chǔ)數(shù)據(jù)的時(shí)候,需要耗費(fèi)一定的內(nèi)存去存儲(chǔ)和數(shù)據(jù)相關(guān)的信息。而這些信息是C語言的寫成的,而當(dāng)我們?nèi)バ薷淖兞康闹禃r(shí),相當(dāng)于重新創(chuàng)建了一個(gè)變量,會(huì)在自動(dòng)跑一遍C的底層代碼,將數(shù)據(jù)所有信息更新,而這些底層代碼很復(fù)雜,不需要我們?nèi)?,而是在python設(shè)計(jì)之初就已經(jīng)全部寫好,我們只要去執(zhí)行變量賦值的操作就ok。這也是python好用的點(diǎn)之一。

那我們現(xiàn)在就可以看看變量賦值這個(gè)python功能背后的高效C語言的的偽代碼:

一個(gè)引用計(jì)數(shù),幫助python默默分配和處理內(nèi)存以及分配和回收。

將變量的類型編碼(type)

指定接下來的數(shù)據(jù)成員大?。╨en)

實(shí)際的整型值

而上述說到的除了值的額外信息,都存儲(chǔ)在我們上述圖片的PyObject_HEAD中。

2、列表和數(shù)組的區(qū)別于聯(lián)系

列表和數(shù)組都是用來存儲(chǔ)一些列的元素的,不同點(diǎn)在于,數(shù)組這個(gè)容器要求當(dāng)中的元素必須保持同一數(shù)據(jù)類型,且是數(shù)字,而列表就不一樣了,可以容納多種不同的數(shù)據(jù)類型。

但我們?cè)陂_篇有說到,當(dāng)我們將數(shù)據(jù)處理成數(shù)值時(shí),方便計(jì)算和其他操作。這個(gè)時(shí)候,我們需要的容器只要可以存儲(chǔ)數(shù)值就可以,使用列表則或耗費(fèi)一定的空間去存儲(chǔ)每一個(gè)元素的“其他信息”,但當(dāng)所有的元素都是數(shù)值時(shí),這種存儲(chǔ)方式顯然不夠高效。

下面我們舉個(gè)例子說明:

從代碼結(jié)果可以看出,列表中每一個(gè)元素的類型都是不同的,所以列表需要耗費(fèi)一定的空間去存儲(chǔ)這些信息,當(dāng)數(shù)據(jù)很大的時(shí)候這種方式顯然會(huì)拖慢運(yùn)行的速度。

這樣,我們就會(huì)發(fā)現(xiàn),列表中每一個(gè)元素對(duì)存儲(chǔ)著各自的類型信息,各自都是一個(gè)完整的對(duì)象。但是,容器中所有的元素都是一個(gè)類型時(shí),顯然這種存儲(chǔ)方式不合適。但不得不說,這是我們的動(dòng)態(tài)數(shù)據(jù)類型必須付出的代價(jià)。

動(dòng)態(tài)數(shù)據(jù)類型與python的array數(shù)組和Numpy的ndarray這些不可變數(shù)據(jù)類型的適用場(chǎng)景:

list等可變數(shù)據(jù)類型適用于需要不斷對(duì)原始數(shù)據(jù)進(jìn)行修改的場(chǎng)景。修改時(shí)的操作在原始數(shù)據(jù)的本身進(jìn)行。

array、ndarray這種不靈活的數(shù)據(jù)類型,適用于我們想要保護(hù)原始數(shù)據(jù)不被修改的場(chǎng)景。當(dāng)對(duì)原始數(shù)組進(jìn)行修改操作時(shí),會(huì)自動(dòng)新建一個(gè)數(shù)組。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python基礎(chǔ)數(shù)據(jù)處理庫
pandas和numpy有什么關(guān)系?
numpy庫入門
Python科學(xué)計(jì)算工具
python numpy庫介紹
Python數(shù)據(jù)處理小白:這有一個(gè)小抄要給你
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服