您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)怎么在Python中利用reshape將多個(gè)二維數(shù)組合并為三維數(shù)組,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
reshape(shape) : 不改變數(shù)組元素,返回一個(gè)shape形狀的數(shù)組,原數(shù)組不變。是對(duì)每行元素進(jìn)行處理
resize(shape) : 與.reshape()功能一致,但修改原數(shù)組
In [1]: a = np.arange(20) #原數(shù)組不變 In [2]: a.reshape([4,5]) Out[2]: array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]) In [3]: a Out[3]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]) #修改原數(shù)組 In [4]: a.resize([4,5]) In [5]: a Out[5]: array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]])
.swapaxes(ax1,ax2) : 將數(shù)組n個(gè)維度中兩個(gè)維度進(jìn)行調(diào)換,不改變?cè)瓟?shù)組
In [6]: a.swapaxes(1,0) Out[6]: array([[ 0, 5, 10, 15], [ 1, 6, 11, 16], [ 2, 7, 12, 17], [ 3, 8, 13, 18], [ 4, 9, 14, 19]])
.flatten() : 對(duì)數(shù)組進(jìn)行降維,返回折疊后的一維數(shù)組,原數(shù)組不變
In [7]: a.flatten() Out[7]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
將多個(gè)二維數(shù)組合并為一個(gè)三維數(shù)組
方法一:
對(duì)于兩個(gè)(或者多個(gè))同一維度的矩陣,直接利用np.array()重新構(gòu)造一個(gè)array,這樣可以變相起到擴(kuò)展維數(shù)的作用。例如:
import numpy as np a = np.array([[1,2,3],[4,5,6]]) b = np.array([[2,2,3],[4,5,6]]) c = np.array([[3,2,3],[4,5,6]]) print('矩陣a:\n',a) print('維數(shù):',a.shape) com = np.array([a,b,c]) print('合并矩陣:\n',com) print('維數(shù):',com.shape) 輸出結(jié)果為: 矩陣a: [[1 2 3] [4 5 6]] 維數(shù): (2, 3) 合并矩陣: [[[1 2 3] [4 5 6]] [[2 2 3] [4 5 6]] [[3 2 3] [4 5 6]]] 維數(shù): (3, 2, 3)
方法二:
但是,如果兩個(gè)array,使用方法一時(shí)會(huì)出現(xiàn)如下結(jié)果:
import numpy as np aa = np.array([[[1,2,3],[4,5,6]],[[2,2,3],[4,5,6]],[[3,2,3],[4,5,6]]]) a = np.array([[4,2,3],[4,5,6]]) com = np.array([aa,a]) print('合并矩陣:\n',com) print('維數(shù):',com.shape) 輸出結(jié)果: 合并矩陣: [array([[[1, 2, 3], [4, 5, 6]], [[2, 2, 3], [4, 5, 6]], [[3, 2, 3], [4, 5, 6]]]) array([[4, 2, 3], [4, 5, 6]])] 維數(shù): (2,)
可以看到:輸出的維數(shù)不對(duì),以上方法就不適用了。
那么,我們就需要利用np.append和array.reshape()函數(shù)對(duì)數(shù)組進(jìn)行拼接之后重組,具體實(shí)現(xiàn)如下:
import numpy as np aa = np.array([[[1,2,3],[4,5,6]],[[2,2,3],[4,5,6]],[[3,2,3],[4,5,6]]]) a = np.array([[4,2,3],[4,5,6]]) data = np.append(aa,a)#先拼接成一個(gè)行向量 print(data) dim = aa.shape#獲取原矩陣的維數(shù) print('原矩陣維數(shù):',dim) data1 = data.reshape(dim[0]+1,dim[1],dim[2])#再通過(guò)原矩陣的維數(shù)重新組合 print('合并矩陣:\n',data1) print('維數(shù):',data1.shape)
現(xiàn)在來(lái)看一下用reshape將二維數(shù)據(jù)升為三維后的數(shù)據(jù)分布情況:
import numpy as np b = np.arange(36).reshape((6,6)) b1 = b.reshape(2,3,6)
b的元素:
b1的元素:
可以看到,原來(lái)6*6的矩陣被分為了2個(gè)3*6的矩陣。每一行的數(shù)據(jù)分布并沒(méi)有改變,只是將前3行劃為一個(gè)維度,然后將后三行劃為另一個(gè)維度。
b1.reshape(6,6)
如果用這條命令,則數(shù)據(jù)又被還原了回去,與b的一樣。
b1.reshape(3,12)
如果用的是reshape(3,12),則相當(dāng)于將數(shù)據(jù)首先拉伸為1維的,然后再將一維數(shù)據(jù)重組為3*12
方法三:
相比于前兩種方法,這種方法可謂“曲線救國(guó)”之典范,具體思路是:先轉(zhuǎn)化成list,拼接后再轉(zhuǎn)化回去。
這是因?yàn)閘ist中的append()函數(shù)可以在添加函數(shù)的時(shí)候不改變?cè)瓉?lái)list的維度。雖然沒(méi)有對(duì)這種方法進(jìn)行一個(gè)速度測(cè)試,但直覺(jué)來(lái)看時(shí)間復(fù)雜度挺高的,建議慎用。
aa = np.array([[[1,2,3],[4,5,6]],[[2,2,3],[4,5,6]],[[3,2,3],[4,5,6]]]) a = np.array([[4,2,3],[4,5,6]]) #將array轉(zhuǎn)換成list aa = aa.tolist(aa) a = a.list(a) aa.append(a)#注意與方法二中np.append()用法的區(qū)別 com = np.array(aa) print(com.shape) 輸出結(jié)果: 合并矩陣: [[[1 2 3] [4 5 6]] [[2 2 3] [4 5 6]] [[3 2 3] [4 5 6]] [[4 2 3] [4, 5, 6]]] 維數(shù): (4,2,3)
這里注意:
兩種類(lèi)型的相互轉(zhuǎn)換函數(shù):
array轉(zhuǎn)list:a = a.tolist()
list轉(zhuǎn)array:a =np.array(a)
以上就是怎么在Python中利用reshape將多個(gè)二維數(shù)組合并為三維數(shù)組,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。