解讀numpy中改變數(shù)組維度的幾種方式
numpy改變數(shù)組維度的幾種方式
在進(jìn)行深度學(xué)習(xí)或強(qiáng)化學(xué)習(xí)時(shí)經(jīng)常需要對(duì)數(shù)據(jù)的維度進(jìn)行變換,本文總結(jié)了numpy中幾種常用的變換數(shù)據(jù)維度的方法
增加一個(gè)維度
在多維數(shù)組的最后一維再增加一個(gè)維度可以使用numpy.reshape或numpy.expand_dims或numpy.newaxis。
示例如下:
import numpy as np import matplotlib.pyplot as plt # 生成一個(gè)二維數(shù)據(jù) x = np.array(range(12)) x = np.reshape(x, (3,4)) print(x) # 輸出為: # [[ 0 ?1 ?2 ?3] # ?[ 4 ?5 ?6 ?7] # ?[ 8 ?9 10 11]] # 在多維數(shù)組的最后一維再增加一個(gè)維度 y1 = np.expand_dims(x, axis=x.ndim) y2 = np.expand_dims(x, axis=-1) y3 = x[:,:,np.newaxis] y4 = np.reshape(x, (*x.shape,1)) # 上述四種方法的結(jié)果完全一致 assert(np.all(y1==y2)) assert(np.all(y2==y3)) assert(np.all(y3==y4)) print(y4) # 輸出為: # [[[ 0] # ? [ 1] # ? [ 2] # ? [ 3]] # ?[[ 4] # ? [ 5] # ? [ 6] # ? [ 7]] # ?[[ 8] # ? [ 9] # ? [10] # ? [11]]]
減小一個(gè)維度
如果多維數(shù)組的最后一維的長(zhǎng)度為1,可以將該維去掉,去掉的方法可以使用numpy.reshape或numpy.squeeze。
示例如下:
# 假設(shè)欲將剛才增加一維生成的多維數(shù)組y4的最后一維去掉 y = y4 x1 = np.squeeze(y, axis=(y.ndim-1)) x2 = np.squeeze(y) x3 = np.squeeze(y, axis=-1) x4 = np.reshape(y, y.shape[:-1]) # 上述四種方法的結(jié)果完全一致 assert(np.all(x1==x2)) assert(np.all(x2==x3)) assert(np.all(x3==x4)) print(x4) # 輸出為: # [[ 0 ?1 ?2 ?3] # ?[ 4 ?5 ?6 ?7] # ?[ 8 ?9 10 11]]
將多維數(shù)組壓縮為一維數(shù)組
將多維數(shù)組壓縮為一維數(shù)組,可使用flatten或ravel以及reshape方法。
示例如下:
z1 = y.flatten() z2 = y.ravel() z3 = y.reshape(y.size) # 上述三種方法結(jié)果完全一致 assert(np.all(z1==z2)) assert(np.all(z2==z3)) print(z3) # 輸出為: # [ 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11]
將多維數(shù)組壓縮為二維數(shù)組,0軸保持不變
在深度學(xué)習(xí)或強(qiáng)化學(xué)習(xí)中,有時(shí)需要將shape為(batches, d1, d2, d3,...)的多維數(shù)組轉(zhuǎn)化為shape為(batches, d1*d2*d3...)的數(shù)組,此時(shí)可以使用reshape進(jìn)行轉(zhuǎn)化。
示例如下:
#生成多維數(shù)據(jù) d0 = np.expand_dims(x, axis=0) d1 = np.repeat(d0, 3, axis=0) print(d1) # 輸出為 # [[[ 0 ?1 ?2 ?3] # ? [ 4 ?5 ?6 ?7] # ? [ 8 ?9 10 11]] # ?[[ 0 ?1 ?2 ?3] # ? [ 4 ?5 ?6 ?7] # ? [ 8 ?9 10 11]] # ?[[ 0 ?1 ?2 ?3] # ? [ 4 ?5 ?6 ?7] # ? [ 8 ?9 10 11]]] #轉(zhuǎn)化為二維數(shù)組 d2 = np.reshape(d1, (d1.shape[0], d1[0].size)) print(d2) # 輸出為: # [[ 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11] # ?[ 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11] # ?[ 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11]]
numpy數(shù)組-交換維度
比如對(duì)于numpy數(shù)組x,x.shape=[3 ,384 ,512],想要得到cv2讀入圖片的格式,即[384,512,3],則需以下兩行命令即可
x.swapaxes(0,2) x.swapaxes(0,1)
np.swapaxes(a,x,y) ,是ndarray對(duì)象的操作函數(shù),用來(lái)調(diào)換維度。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)新年倒計(jì)時(shí)實(shí)例代碼
大家好,本篇文章主要講的是python實(shí)現(xiàn)新年倒計(jì)時(shí)實(shí)例代碼,昂星期的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
Python?DPED機(jī)器學(xué)習(xí)之實(shí)現(xiàn)照片美化
本篇文章主要介紹了利用Python中的DPED工具實(shí)現(xiàn)照片一鍵美化,可以實(shí)現(xiàn)照片亮度提高和色彩鮮明度提高,代碼簡(jiǎn)潔易懂,具有一定學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2021-11-11
python中g(shù)et_dummies()用法示例詳解
get_dummies函數(shù)是Python中的一個(gè)函數(shù),用于將分類(lèi)變量轉(zhuǎn)換為啞變量,下面這篇文章主要介紹了python中g(shù)et_dummies()用法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-09-09
詳解如何使用Python和正則表達(dá)式處理XML表單數(shù)據(jù)
在日常的Web開(kāi)發(fā)中,處理表單數(shù)據(jù)是一個(gè)常見(jiàn)的任務(wù),而XML是一種常用的數(shù)據(jù)格式,用于在不同的系統(tǒng)之間傳遞和存儲(chǔ)數(shù)據(jù),本文通過(guò)闡述一個(gè)技術(shù)問(wèn)題并給出解答的方式,介紹如何使用Python和正則表達(dá)式處理XML表單數(shù)據(jù),需要的朋友可以參考下2023-09-09
Python OpenCV招商銀行信用卡卡號(hào)識(shí)別的方法
這篇文章主要介紹了Python OpenCV招商銀行信用卡卡號(hào)識(shí)別的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

