NumPy 形狀操縱的實(shí)現(xiàn)示例
改變數(shù)組的形狀
一個(gè)數(shù)組的形狀是由每個(gè)軸的元素?cái)?shù)量決定的:
>>> a = np.floor(10*np.random.random((3,4)))
>>> a
array([[ 2., 8., 0., 6.],
[ 4., 5., 1., 1.],
[ 8., 9., 3., 6.]])
>>> a.shape
(3, 4)
可以使用各種命令更改數(shù)組的形狀。請(qǐng)注意,以下三個(gè)命令都返回一個(gè)修改后的數(shù)組,但不會(huì)更改原始數(shù)組:
>>> a.ravel() # returns the array, flattened
array([ 2., 8., 0., 6., 4., 5., 1., 1., 8., 9., 3., 6.])
>>> a.reshape(6,2) # returns the array with a modified shape
array([[ 2., 8.],
[ 0., 6.],
[ 4., 5.],
[ 1., 1.],
[ 8., 9.],
[ 3., 6.]])
>>> a.T # returns the array, transposed
array([[ 2., 4., 8.],
[ 8., 5., 9.],
[ 0., 1., 3.],
[ 6., 1., 6.]])
>>> a.T.shape
(4, 3)
>>> a.shape
(3, 4)
由 ravel() 產(chǎn)生的數(shù)組中元素的順序通常是“C風(fēng)格”,也就是說(shuō),最右邊的索引“變化最快”,因此[0,0] 之后的元素是 [0,1] 。如果將數(shù)組重新整形為其他形狀,則該數(shù)組將被視為“C風(fēng)格”。NumPy通常創(chuàng)建按此順序存儲(chǔ)的數(shù)組,因此 ravel() 通常不需要復(fù)制其參數(shù),但如果數(shù)組是通過(guò)獲取另一個(gè)數(shù)組的切片或使用不常見(jiàn)的選項(xiàng)創(chuàng)建的,則可能需要復(fù)制它。還可以使用可選參數(shù)指示函數(shù) ravel() 和 reshape(),以使用FORTRAN樣式的數(shù)組,其中最左邊的索引變化最快。
該 reshape 函數(shù)返回帶有修改形狀的參數(shù),而該 ndarray.resize 方法會(huì)修改數(shù)組本身:
>>> a
array([[ 2., 8., 0., 6.],
[ 4., 5., 1., 1.],
[ 8., 9., 3., 6.]])
>>> a.resize((2,6))
>>> a
array([[ 2., 8., 0., 6., 4., 5.],
[ 1., 1., 8., 9., 3., 6.]])
如果在 reshape 操作中將 size 指定為-1,則會(huì)自動(dòng)計(jì)算其他的 size 大?。?/p>
>>> a.reshape(3,-1)
array([[ 2., 8., 0., 6.],
[ 4., 5., 1., 1.],
[ 8., 9., 3., 6.]])
另見(jiàn)
將不同數(shù)組堆疊在一起 np.vstack: 行堆疊, np.hstack: 列堆疊
幾個(gè)數(shù)組可以沿不同的軸堆疊在一起,例如:
>>> a = np.floor(10*np.random.random((2,2)))
>>> a
array([[ 8., 8.],
[ 0., 0.]])
>>> b = np.floor(10*np.random.random((2,2)))
>>> b
array([[ 1., 8.],
[ 0., 4.]])
>>> np.vstack((a,b))
array([[ 8., 8.],
[ 0., 0.],
[ 1., 8.],
[ 0., 4.]])
>>> np.hstack((a,b))
array([[ 8., 8., 1., 8.],
[ 0., 0., 0., 4.]])
該函數(shù)將 column_stack 1D數(shù)組作為列堆疊到2D數(shù)組中。它僅相當(dāng)于 hstack 2D數(shù)組:
>>> from numpy import newaxis
>>> np.column_stack((a,b)) # with 2D arrays
array([[ 8., 8., 1., 8.],
[ 0., 0., 0., 4.]])
>>> a = np.array([4.,2.])
>>> b = np.array([3.,8.])
>>> np.column_stack((a,b)) # returns a 2D array
array([[ 4., 3.],
[ 2., 8.]])
>>> np.hstack((a,b)) # the result is different
array([ 4., 2., 3., 8.])
>>> a[:,newaxis] # this allows to have a 2D columns vector
array([[ 4.],
[ 2.]])
>>> np.column_stack((a[:,newaxis],b[:,newaxis]))
array([[ 4., 3.],
[ 2., 8.]])
>>> np.hstack((a[:,newaxis],b[:,newaxis])) # the result is the same
array([[ 4., 3.],
[ 2., 8.]])
另一方面,該函數(shù) ma.row_stack 等效 vstack 于任何輸入數(shù)組。通常,對(duì)于具有兩個(gè)以上維度的數(shù)組, hstack 沿其第二軸 vstack 堆疊,沿其第一軸堆疊,并concatenate 允許可選參數(shù)給出連接應(yīng)發(fā)生的軸的編號(hào)。
注意
在復(fù)雜的情況下,r_和c c_于通過(guò)沿一個(gè)軸堆疊數(shù)字來(lái)創(chuàng)建數(shù)組很有用。它們?cè)试S使用范圍操作符(“:”)。
>>> np.r_[1:4,0,4] array([1, 2, 3, 0, 4])
與數(shù)組一起用作參數(shù)時(shí), r_ 和 c_ 在默認(rèn)行為上類(lèi)似于 vstack 和 hstack ,但允許使用可選參數(shù)給出要連接的軸的編號(hào)。
另見(jiàn)
hstack, vstack, column_stack, concatenate, c_, r_
將一個(gè)數(shù)組拆分成幾個(gè)較小的數(shù)組
使用 hsplit,可以沿?cái)?shù)組的水平軸拆分?jǐn)?shù)組,方法是指定要返回的形狀相等的數(shù)組的數(shù)量,或者指定應(yīng)該在其之后進(jìn)行分割的列:
>>> a = np.floor(10*np.random.random((2,12)))
>>> a
array([[ 9., 5., 6., 3., 6., 8., 0., 7., 9., 7., 2., 7.],
[ 1., 4., 9., 2., 2., 1., 0., 6., 2., 2., 4., 0.]])
>>> np.hsplit(a,3) # Split a into 3
[array([[ 9., 5., 6., 3.],
[ 1., 4., 9., 2.]]), array([[ 6., 8., 0., 7.],
[ 2., 1., 0., 6.]]), array([[ 9., 7., 2., 7.],
[ 2., 2., 4., 0.]])]
>>> np.hsplit(a,(3,4)) # Split a after the third and the fourth column
[array([[ 9., 5., 6.],
[ 1., 4., 9.]]), array([[ 3.],
[ 2.]]), array([[ 6., 8., 0., 7., 9., 7., 2., 7.],
[ 2., 1., 0., 6., 2., 2., 4., 0.]])]
vsplit 沿垂直軸分割,并 array_split 允許指定要分割的軸。
到此這篇關(guān)于NumPy 形狀操縱的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)NumPy 形狀操縱內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python正則表達(dá)式抓取成語(yǔ)網(wǎng)站
做NLPproject時(shí)需要一個(gè)成語(yǔ)庫(kù),我需要的是純成語(yǔ),網(wǎng)上找的都是有詳細(xì)解釋的。于是自己寫(xiě)了一個(gè)爬成語(yǔ)的python程序2013-11-11
pytorch中retain_graph==True的作用說(shuō)明
這篇文章主要介紹了pytorch中retain_graph==True的作用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Python給exe添加以管理員運(yùn)行的屬性方法詳解
這篇文章主要為大家介紹了Python給exe添加以管理員運(yùn)行的屬性方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Python+Turtle制作七夕愛(ài)心光波表白的示例代碼
七夕要來(lái)啦,小編在閑暇之余創(chuàng)作了一個(gè)基于Python+Turtle的愛(ài)心光波表白,文中有詳細(xì)的代碼示例,對(duì)我們七夕表白有很大的幫助,感興趣的小伙伴們快來(lái)來(lái)看看吧2023-08-08
Ubuntu下使用Python實(shí)現(xiàn)游戲制作中的切分圖片功能
這篇文章主要介紹了Ubuntu下使用Python實(shí)現(xiàn)游戲制作中的切分圖片功能,涉及Python針對(duì)圖片的讀取、載入、切分運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
Pycharm IDE安裝環(huán)境配置的2025最新完整版教程
PyCharm是目前最流行、使用最廣泛的Python IDE,帶有一整套可以幫助用戶(hù)在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,下面我們來(lái)看看Pycharm IDE安裝環(huán)境配置的最新教程吧2025-03-03
Python函數(shù)參數(shù)分類(lèi)使用與新特性詳細(xì)分析講解
在聲明函數(shù)的時(shí)候,一般會(huì)根據(jù)函數(shù)所要實(shí)現(xiàn)的功能來(lái)決定函數(shù)是否需要參數(shù)。在多數(shù)情況下,我們聲明的函數(shù)都會(huì)使用到參數(shù),這篇文章主要介紹了Python函數(shù)參數(shù)2023-01-01

