溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Python中利用reshape將多個二維數組合并為三維數組

發布時間:2021-01-11 15:50:20 來源:億速云 閱讀:1968 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關怎么在Python中利用reshape將多個二維數組合并為三維數組,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

reshape(shape) : 不改變數組元素,返回一個shape形狀的數組,原數組不變。是對每行元素進行處理

resize(shape) : 與.reshape()功能一致,但修改原數組

In [1]: a = np.arange(20)
#原數組不變
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])
 
#修改原數組
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) : 將數組n個維度中兩個維度進行調換,不改變原數組

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() : 對數組進行降維,返回折疊后的一維數組,原數組不變

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])

將多個二維數組合并為一個三維數組

方法一:

對于兩個(或者多個)同一維度的矩陣,直接利用np.array()重新構造一個array,這樣可以變相起到擴展維數的作用。例如:

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('維數:',a.shape)
 
com = np.array([a,b,c])
print('合并矩陣:\n',com)
print('維數:',com.shape)
 
輸出結果為:
 
矩陣a:
 [[1 2 3]
 [4 5 6]]
維數: (2, 3)
合并矩陣:
 [[[1 2 3]
 [4 5 6]]
 
 [[2 2 3]
 [4 5 6]]
 
 [[3 2 3]
 [4 5 6]]]
維數: (3, 2, 3)

方法二:

但是,如果兩個array,使用方法一時會出現如下結果:

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('維數:',com.shape)
 
輸出結果:
 
合并矩陣:
 [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]])]
維數: (2,)

可以看到:輸出的維數不對,以上方法就不適用了。

那么,我們就需要利用np.append和array.reshape()函數對數組進行拼接之后重組,具體實現如下:

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)#先拼接成一個行向量
print(data)
 
dim = aa.shape#獲取原矩陣的維數
print('原矩陣維數:',dim)
data1 = data.reshape(dim[0]+1,dim[1],dim[2])#再通過原矩陣的維數重新組合
 
print('合并矩陣:\n',data1)
print('維數:',data1.shape)

現在來看一下用reshape將二維數據升為三維后的數據分布情況:

import numpy as np
b = np.arange(36).reshape((6,6))
b1 = b.reshape(2,3,6)

b的元素:

怎么在Python中利用reshape將多個二維數組合并為三維數組

b1的元素:

怎么在Python中利用reshape將多個二維數組合并為三維數組

可以看到,原來6*6的矩陣被分為了2個3*6的矩陣。每一行的數據分布并沒有改變,只是將前3行劃為一個維度,然后將后三行劃為另一個維度。

b1.reshape(6,6)

如果用這條命令,則數據又被還原了回去,與b的一樣。

b1.reshape(3,12)

怎么在Python中利用reshape將多個二維數組合并為三維數組

如果用的是reshape(3,12),則相當于將數據首先拉伸為1維的,然后再將一維數據重組為3*12

方法三:

相比于前兩種方法,這種方法可謂“曲線救國”之典范,具體思路是:先轉化成list,拼接后再轉化回去。

這是因為list中的append()函數可以在添加函數的時候不改變原來list的維度。雖然沒有對這種方法進行一個速度測試,但直覺來看時間復雜度挺高的,建議慎用。

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轉換成list
aa = aa.tolist(aa)
a = a.list(a)
 
aa.append(a)#注意與方法二中np.append()用法的區別
com = np.array(aa)
print(com.shape)
 
輸出結果:
 
合并矩陣:
  [[[1 2 3]
  [4 5 6]]
 
  [[2 2 3]
  [4 5 6]]
 
  [[3 2 3]
  [4 5 6]]
  
  [[4 2 3]
  [4, 5, 6]]]
維數: (4,2,3)

這里注意:

兩種類型的相互轉換函數:

array轉list:a = a.tolist()

list轉array:a =np.array(a)

以上就是怎么在Python中利用reshape將多個二維數組合并為三維數組,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女