自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

開(kāi)發(fā) 前端
NumPy是Python的最重要的擴(kuò)展程序庫(kù)之一,也是入門機(jī)器學(xué)習(xí)編程的必備工具。然而對(duì)初學(xué)者來(lái)說(shuō),NumPy的大量運(yùn)算方法非常難記。

本文經(jīng)AI新媒體量子位(公眾號(hào)ID:QbitAI)授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)聯(lián)系出處。

 NumPy是Python的最重要的擴(kuò)展程序庫(kù)之一,也是入門機(jī)器學(xué)習(xí)編程的必備工具。然而對(duì)初學(xué)者來(lái)說(shuō),NumPy的大量運(yùn)算方法非常難記。

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

最近,國(guó)外有位程序員講NumPy的基本運(yùn)算以圖解的方式寫(xiě)下來(lái),讓學(xué)習(xí)過(guò)程變得輕松有趣。在Reddit機(jī)器學(xué)習(xí)社區(qū)發(fā)布不到半天就收獲了500+贊。

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

下面就讓我們跟隨他的教程一起來(lái)學(xué)習(xí)吧!

教程內(nèi)容分為向量 (一維數(shù)組)、矩陣 (二維數(shù)組)、三維與更高維數(shù)組3個(gè)部分。

Numpy數(shù)組與Python列表

在介紹正式內(nèi)容之前,先讓我們先來(lái)了解一下Numpy數(shù)組與Python列表的區(qū)別。

乍一看,NumPy數(shù)組類似于Python列表。它們都可以用作容器,具有獲?。╣etting)和設(shè)置(setting)元素以及插入和移除元素的功能。

兩者有很多相似之處,以下是二者在運(yùn)算時(shí)的一個(gè)示例:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

和Python列表相比,Numpy數(shù)組具有以下特點(diǎn):

更緊湊,尤其是在一維以上的維度;向量化操作時(shí)比Python列表快,但在末尾添加元素比Python列表慢。

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

△在末尾添加元素時(shí),Python列表復(fù)雜度為O(1),NumPy復(fù)雜度為O(N)

向量運(yùn)算

向量初始化

創(chuàng)建NumPy數(shù)組的一種方法是從Python列表直接轉(zhuǎn)換,數(shù)組元素的類型與列表元素類型相同。

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

NumPy數(shù)組無(wú)法像Python列表那樣加長(zhǎng),因?yàn)樵跀?shù)組末尾沒(méi)有保留空間。

因此,常見(jiàn)的做法是定義一個(gè)Python列表,對(duì)它進(jìn)行操作,然后再轉(zhuǎn)換為NumPy數(shù)組,或者用np.zerosnp.empty初始化數(shù)組,預(yù)分配必要的空間:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

有時(shí)我們需要?jiǎng)?chuàng)建一個(gè)空數(shù)組,大小和元素類型與現(xiàn)有數(shù)組相同:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

實(shí)際上,所有用常量填充創(chuàng)建的數(shù)組的函數(shù)都有一個(gè)_like對(duì)應(yīng)項(xiàng),來(lái)創(chuàng)建相同類型的常數(shù)數(shù)組:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

在NumPy中,可以用arange或者linspace來(lái)初始化單調(diào)序列數(shù)組:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

如果需要類似[0., 1., 2.]的浮點(diǎn)數(shù)組,可以更改arange輸出的類型:arange(3).astype(float)。

但是有更好的方法:arange函數(shù)對(duì)數(shù)據(jù)類型敏感,如果將整數(shù)作為參數(shù),生成整數(shù)數(shù)組;如果輸入浮點(diǎn)數(shù)(例如arange(3.)),則生成浮點(diǎn)數(shù)組。

但是arange在處理浮點(diǎn)數(shù)方面并不是特別擅長(zhǎng):

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

這是因?yàn)?.1對(duì)于我們來(lái)說(shuō)是一個(gè)有限的十進(jìn)制數(shù),但對(duì)計(jì)算機(jī)而言卻不是。在二進(jìn)制下,0.1是一個(gè)無(wú)窮小數(shù),必須在某處截?cái)唷?/p>

這就是為什么將小數(shù)部分加到步驟arange通常是一個(gè)不太好的方法:我們可能會(huì)遇到一個(gè)bug,導(dǎo)致數(shù)組的元素個(gè)數(shù)不是我們想要的數(shù),這會(huì)降低代碼的可讀性和可維護(hù)性。

這時(shí)候,linspace會(huì)派上用場(chǎng)。它不受舍入錯(cuò)誤的影響,并始終生成要求的元素?cái)?shù)。

出于測(cè)試目的,通常需要生成隨機(jī)數(shù)組,NumPy提供隨機(jī)整數(shù)、均勻分布、正態(tài)分布等幾種隨機(jī)數(shù)形式:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

向量索引

一旦將數(shù)據(jù)存儲(chǔ)在數(shù)組中,NumPy便會(huì)提供簡(jiǎn)單的方法將其取出:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

上面展示了各式各樣的索引,例如取出某個(gè)特定區(qū)間,從右往左索引、只取出奇數(shù)位等等。

但它們都是所謂的view,也就是不存儲(chǔ)原始數(shù)據(jù)。并且如果原始數(shù)組在被索引后進(jìn)行更改,則不會(huì)反映原始數(shù)組的改變。

這些索引方法允許分配修改原始數(shù)組的內(nèi)容,因此需要特別注意:只有下面最后一種方法才是復(fù)制數(shù)組,如果用其他方法都可能破壞原始數(shù)據(jù):

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

從NumPy數(shù)組中獲取數(shù)據(jù)的另一種超級(jí)有用的方法是布爾索引,它允許使用各種邏輯運(yùn)算符,來(lái)檢索符合條件的元素:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

注意:Python中的三元比較3<=a<=5在NumPy數(shù)組中不起作用。

如上所述,布爾索引也會(huì)改寫(xiě)數(shù)組。它有兩個(gè)常見(jiàn)的函數(shù),分別是np.wherenp.clip

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

向量運(yùn)算

算術(shù)運(yùn)算是NumPy速度最引入注目的地方之一。NumPy的向量運(yùn)算符已達(dá)到C++級(jí)別,避免了Python的慢循環(huán)。

NumPy允許像普通數(shù)字一樣操作整個(gè)數(shù)組(加減乘除、整除、冪):

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

△ 和Python中一樣,a//b表示div b(整除),x**n表示xⁿ

向量還可以與標(biāo)量進(jìn)行類似的運(yùn)算,方法相同:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

大多數(shù)的數(shù)學(xué)函數(shù)都有NumPy對(duì)應(yīng)項(xiàng)用于處理向量:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

向量的點(diǎn)積、叉積也有運(yùn)算符:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

我們也可以進(jìn)行三角函數(shù)、反三角函數(shù)、求斜邊運(yùn)算:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

數(shù)組可以四舍五入為整數(shù):

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

△ floor取下界;ceil取上界;round為四舍六入五取偶

NumPy還可以執(zhí)行以下基本的統(tǒng)計(jì)運(yùn)算(最大最小值、平均值、方差、標(biāo)準(zhǔn)差):

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

不過(guò)排序函數(shù)的功能比Python列表對(duì)應(yīng)函數(shù)更少:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

搜索向量中的元素

與Python列表相反,NumPy數(shù)組沒(méi)有index方法。

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

 

  • 查找元素的一種方法是np.where(a==x)[0][0],它既不優(yōu)雅也不快速,因?yàn)橐檎业捻?xiàng)需要從開(kāi)頭遍歷數(shù)組的所有元素。
  • 更快的方式是通過(guò)Numba中的next((i[0] for i, v in np.ndenumerate(a) if v==x), -1)來(lái)加速。
  • 一旦對(duì)數(shù)組進(jìn)行排序,情況就會(huì)變得更好:v = np.searchsorted(a, x); return v if a[v]==x else -1的復(fù)雜度為O(log N),確實(shí)非???,但是首先需要O(N log N)的排序時(shí)間。

 

比較浮點(diǎn)數(shù)

函數(shù)np.allclose(a, b)用于比較具有給定公差的浮點(diǎn)數(shù)組:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

 

  • np.allclose假設(shè)所有的比較數(shù)字的等級(jí)是1個(gè)單位。例如在上圖中,它就認(rèn)為1e-9和2e-9相同,如果要進(jìn)行更細(xì)致的比較,需要通過(guò)atol指定比較等級(jí)1:np.allclose(1e-9, 2e-9, atol=1e-17) == False。
  • math.isclose進(jìn)行比較沒(méi)有假設(shè)前提,而是基于用戶給出的一個(gè)合理abs_tol值:math.isclose(0.1+0.2–0.3, abs_tol=1e-8) == True。

 

除此之外np.allclose在絕對(duì)和相對(duì)公差公式中還存在一些小問(wèn)題,例如,對(duì)某些數(shù)存在allclose(a, b) != allclose(b, a)。這些問(wèn)題已在math.isclose函數(shù)中得到解決。

矩陣運(yùn)算

NumPy中曾經(jīng)有一個(gè)專用的類matrix,但現(xiàn)在已棄用,因此下面將交替使用矩陣和2D數(shù)組兩個(gè)詞。

矩陣初始化語(yǔ)法與向量相似:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

這里需要雙括號(hào),因?yàn)榈诙€(gè)位置參數(shù)是為dtype保留的。

隨機(jī)矩陣的生成也類似于向量的生成:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

二維索引語(yǔ)法比嵌套列表更方便:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

和一維數(shù)組一樣,上圖的view表示,切片數(shù)組實(shí)際上并未進(jìn)行任何復(fù)制。修改數(shù)組后,更改也將反映在切片中。

axis參數(shù)

在許多操作(例如求和)中,我們需要告訴NumPy是否要跨行或跨列進(jìn)行操作。為了使用任意維數(shù)的通用表示法,NumPy引入了axis的概念:axis參數(shù)實(shí)際上是所討論索引的數(shù)量:第一個(gè)索引是axis=0,第二個(gè)索引是axis=1,等等。

因此在二維數(shù)組中,如果axis=0是按列,那么axis=1就是按行。

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

矩陣運(yùn)算

除了普通的運(yùn)算符(如+,-,*,/,//和**)以元素方式計(jì)算外,還有一個(gè)@運(yùn)算符可計(jì)算矩陣乘積:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

在第一部分中,我們已經(jīng)看到向量乘積的運(yùn)算,NumPy允許向量和矩陣之間,甚至兩個(gè)向量之間進(jìn)行元素的混合運(yùn)算:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

行向量與列向量

從上面的示例可以看出,在二維數(shù)組中,行向量和列向量被不同地對(duì)待。

默認(rèn)情況下,一維數(shù)組在二維操作中被視為行向量。因此,將矩陣乘以行向量時(shí),可以使用(n,)或(1,n),結(jié)果將相同。

如果需要列向量,則有轉(zhuǎn)置方法對(duì)其進(jìn)行操作:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

能夠從一維數(shù)組中生成二位數(shù)組列向量的兩個(gè)操作是使用命令reshape重排和newaxis建立新索引:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

這里的-1參數(shù)表示reshape自動(dòng)計(jì)算第二個(gè)維度上的數(shù)組長(zhǎng)度,None在方括號(hào)中充當(dāng)np.newaxis的快捷方式,該快捷方式在指定位置添加了一個(gè)空axis。

因此,NumPy中總共有三種類型的向量:一維數(shù)組,二維行向量和二維列向量。這是兩者之間顯式轉(zhuǎn)換的示意圖:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

根據(jù)規(guī)則,一維數(shù)組被隱式解釋為二維行向量,因此通常不必在這兩個(gè)數(shù)組之間進(jìn)行轉(zhuǎn)換,相應(yīng)區(qū)域用灰色標(biāo)出。

矩陣操作

連接矩陣有兩個(gè)主要函數(shù):

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

這兩個(gè)函數(shù)只堆疊矩陣或只堆疊向量時(shí),都可以正常工作。但是當(dāng)涉及一維數(shù)組與矩陣之間的混合堆疊時(shí),vstack可以正常工作:hstack會(huì)出現(xiàn)尺寸不匹配錯(cuò)誤。

因?yàn)槿缟纤?,一維數(shù)組被解釋為行向量,而不是列向量。解決方法是將其轉(zhuǎn)換為列向量,或者使用column_stack自動(dòng)執(zhí)行:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

堆疊的逆向操作是分裂:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

矩陣可以通過(guò)兩種方式完成復(fù)制:tile類似于復(fù)制粘貼,repeat類似于分頁(yè)打印。

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

特定的列和行可以用delete進(jìn)行刪除:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

逆運(yùn)算為插入:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

append就像hstack一樣,該函數(shù)無(wú)法自動(dòng)轉(zhuǎn)置一維數(shù)組,因此再次需要對(duì)向量進(jìn)行轉(zhuǎn)置或添加長(zhǎng)度,或者使用column_stack代替:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

實(shí)際上,如果我們需要做的就是向數(shù)組的邊界添加常量值,那么pad函數(shù)就足夠了:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

Meshgrid

如果我們要?jiǎng)?chuàng)建以下矩陣:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

兩種方法都很慢,因?yàn)樗鼈兪褂玫氖荘ython循環(huán)。在MATLAB處理這類問(wèn)題的方法是創(chuàng)建一個(gè)meshgrid

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

該meshgrid函數(shù)接受任意一組索引,mgrid僅是切片,indices只能生成完整的索引范圍。fromfunction如上所述,僅使用I和J參數(shù)一次調(diào)用提供的函數(shù)。

但是實(shí)際上,在NumPy中有一種更好的方法。無(wú)需在整個(gè)矩陣上耗費(fèi)存儲(chǔ)空間。僅存儲(chǔ)大小正確的矢量就足夠了,運(yùn)算規(guī)則將處理其余的內(nèi)容:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

在沒(méi)有indexing=’ij’參數(shù)的情況下,meshgrid將更改參數(shù)的順序:J, I= np.meshgrid(j, i)—這是一種“ xy”模式,用于可視化3D圖。

除了在二維或三維數(shù)組上初始化外,meshgrid還可以用于索引數(shù)組:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

矩陣統(tǒng)計(jì)

就像之前提到的統(tǒng)計(jì)函數(shù)一樣,二維數(shù)組接受到axis參數(shù)后,會(huì)采取相應(yīng)的統(tǒng)計(jì)運(yùn)算:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

二維及更高維度中,argmin和argmax函數(shù)返回最大最小值的索引:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

all和any兩個(gè)函數(shù)也能使用axis參數(shù):

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

矩陣排序

盡管axis參數(shù)對(duì)上面列出的函數(shù)很有用,但對(duì)二維排序卻沒(méi)有幫助:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

axis絕不是Python列表key參數(shù)的替代。不過(guò)NumPy具有多個(gè)函數(shù),允許按列進(jìn)行排序:

1、按第一列對(duì)數(shù)組排序:a[a[:,0].argsort()]

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

argsort排序后,此處返回原始數(shù)組的索引數(shù)組。

此技巧可以重復(fù),但是必須小心,以免下一個(gè)排序混淆前一個(gè)排序的結(jié)果:

  1. a = a[a[:,2].argsort()] 
  2. a = a[a[:,1].argsort(kind=’stable’)] 
  3. a = a[a[:,0].argsort(kind=’stable’)] 

 

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

2、有一個(gè)輔助函數(shù)lexsort,該函數(shù)按上述方式對(duì)所有可用列進(jìn)行排序,但始終按行執(zhí)行,例如:

  • a[np.lexsort(np.flipud(a[2,5].T))]:先通過(guò)第2列排序,再通過(guò)第5列排序;
  • a[np.lexsort(np.flipud(a.T))]:按從左到右所有列依次進(jìn)行排序。
看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

3、還有一個(gè)參數(shù)order,但是如果從普通(非結(jié)構(gòu)化)數(shù)組開(kāi)始,則既不快速也不容易使用。

4、因?yàn)檫@個(gè)特殊的操作方式更具可讀性和它可能是一個(gè)更好的選擇,這樣做的pandas不易出錯(cuò):

  • pd.DataFrame(a).sort_values(by=[2,5]).to_numpy():通過(guò)第2列再通過(guò)第5列進(jìn)行排序。
  • pd.DataFrame(a).sort_values().to_numpy():通過(guò)從左向右所有列進(jìn)行排序

 

高維數(shù)組運(yùn)算

通過(guò)重排一維向量或轉(zhuǎn)換嵌套的Python列表來(lái)創(chuàng)建3D數(shù)組時(shí),索引的含義為(z,y,x)。

第一個(gè)索引是平面的編號(hào),然后才是在該平面上的移動(dòng):

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

這種索引順序很方便,例如用于保留一堆灰度圖像:這a[i]是引用第i個(gè)圖像的快捷方式。

但是此索引順序不是通用的。處理RGB圖像時(shí),通常使用(y,x,z)順序:前兩個(gè)是像素坐標(biāo),最后一個(gè)是顏色坐標(biāo)(Matplotlib中是RGB ,OpenCV中是BGR ):

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

這樣,可以方便地引用特定像素:a[i,j]給出像素的RGB元組(i,j)。

因此,創(chuàng)建特定幾何形狀的實(shí)際命令取決于正在處理的域的約定:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

顯然,NumPy函數(shù)像hstack、vstack或dstack不知道這些約定。其中硬編碼的索引順序是(y,x,z),RGB圖像順序是:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

△RGB圖像數(shù)組(為簡(jiǎn)便起見(jiàn),上圖僅2種顏色)

如果數(shù)據(jù)的布局不同,則使用concatenate命令堆疊圖像,并在axis參數(shù)中提供顯式索引數(shù)會(huì)更方便:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

如果不方便使用axis,可以將數(shù)組轉(zhuǎn)換硬編碼為hstack的形式:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

這種轉(zhuǎn)換沒(méi)有實(shí)際的復(fù)制發(fā)生。它只是混合索引的順序。

混合索引順序的另一個(gè)操作是數(shù)組轉(zhuǎn)置。檢查它可能會(huì)讓我們對(duì)三維數(shù)組更加熟悉。

根據(jù)我們決定的axis順序,轉(zhuǎn)置數(shù)組所有平面的實(shí)際命令將有所不同:對(duì)于通用數(shù)組,它交換索引1和2,對(duì)于RGB圖像,它交換0和1:

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

有趣的是,(和唯一的操作模式)默認(rèn)的axes參數(shù)顛倒了索引順序,這與上述兩個(gè)索引順序約定都不相符。

最后,還有一個(gè)函數(shù),可以在處理多維數(shù)組時(shí)節(jié)省很多Python循環(huán),并使代碼更簡(jiǎn)潔,這就是愛(ài)因斯坦求和函數(shù)einsum

看圖學(xué)NumPy:掌握n維數(shù)組基礎(chǔ)知識(shí)點(diǎn),看這一篇就夠了

它將沿重復(fù)索引的數(shù)組求和。

最后,若要掌握NumPy,可以前去GitHub上的項(xiàng)目——100道NumPy練習(xí)題,驗(yàn)證自己的學(xué)習(xí)成果。

 

 

責(zé)任編輯:張燕妮 來(lái)源: 量子位
相關(guān)推薦

2019-05-09 15:12:20

Linux 系統(tǒng) 數(shù)據(jù)

2023-02-10 09:04:27

2020-02-18 16:20:03

Redis ANSI C語(yǔ)言日志型

2022-06-20 09:01:23

Git插件項(xiàng)目

2022-08-01 11:33:09

用戶分析標(biāo)簽策略

2021-04-08 07:37:39

隊(duì)列數(shù)據(jù)結(jié)構(gòu)算法

2023-09-11 08:13:03

分布式跟蹤工具

2023-10-30 07:12:04

2019-05-14 09:31:16

架構(gòu)整潔軟件編程范式

2018-05-22 08:24:50

PythonPyMongoMongoDB

2023-10-17 08:15:28

API前后端分離

2024-09-23 08:00:00

消息隊(duì)列MQ分布式系統(tǒng)

2020-07-03 08:21:57

Java集合框架

2017-03-11 22:19:09

深度學(xué)習(xí)

2022-04-07 10:39:21

反射Java安全

2023-11-18 09:30:42

模型AI

2022-07-06 12:07:06

Python函數(shù)式編程

2019-04-01 10:43:59

Linux問(wèn)題故障

2022-05-19 08:28:19

索引數(shù)據(jù)庫(kù)

2020-10-21 14:12:02

Single Sign
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)