Python中reshape的使用詳解
Python中reshape的使用
在 Python 中,reshape
函數(shù)主要用于調(diào)整數(shù)組或矩陣的維度,?尤其常見于 NumPy 和 Pandas 庫。
以下是詳細(xì)的用法和示例:
1. ?NumPy 中的 reshape
NumPy 的 reshape
是調(diào)整數(shù)組維度的核心工具,適用于科學(xué)計算和多維數(shù)據(jù)處理。
基本語法
numpy.reshape(array, new_shape, order='C')
或直接調(diào)用數(shù)組對象的 reshape
方法:
arr.reshape(new_shape)
參數(shù)說明
?**new_shape
: 目標(biāo)形狀(如 (行, 列)
),可以是整數(shù)或元組。
- 關(guān)鍵規(guī)則**:新形狀的元素總數(shù)必須與原數(shù)組一致(例如,原數(shù)組有 6 個元素,可改為
(2,3)
,但不能改為(3,3)
)。
?**order
**:可選參數(shù),控制元素填充順序:
'C'
(默認(rèn)):按行優(yōu)先(C 風(fēng)格)填充。'F'
:按列優(yōu)先(Fortran 風(fēng)格)填充。
示例代碼
- 示例 1:一維轉(zhuǎn)二維
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6]) reshaped = arr.reshape((2, 3)) # 改為 2 行 3 列 print(reshaped) # 輸出: # [[1 2 3] # [4 5 6]]
- 示例 2:多維數(shù)組調(diào)整
matrix = np.array([[1, 2], [3, 4], [5, 6]]) # 改為 2行3列(總元素數(shù)必須為6) new_matrix = matrix.reshape((2, 3)) print(new_matrix) # 輸出: # [[1 2 3] # [4 5 6]]
- 示例 3:自動推斷維度(使用
-1
)
通過 -1
自動計算某一維的大小:
arr = np.array([1, 2, 3, 4, 5, 6]) # 自動計算行數(shù)(總元素數(shù)=6 → 行數(shù)=6/3=2) reshaped = arr.reshape((-1, 3)) print(reshaped) # 輸出: # [[1 2 3] # [4 5 6]]
- 示例 4:調(diào)整維度順序(
order
參數(shù))
arr = np.array([1, 2, 3, 4, 5, 6]) # 按列優(yōu)先填充 fortran_arr = arr.reshape((2, 3), order='F') print(fortran_arr) # 輸出: # [[1 3 5] # [2 4 6]]
2. ?Pandas 中的 reshape
Pandas 主要通過以下方法實現(xiàn)數(shù)據(jù)重塑:
- ?**
stack()
/unstack()
**: 行列轉(zhuǎn)換。 - ?**
pivot()
/melt()
**: 寬表與長表轉(zhuǎn)換。
示例:stack 和 unstack
import pandas as pd # 創(chuàng)建一個 DataFrame df = pd.DataFrame({ "A": [1, 2, 3], "B": [4, 5, 6] }, index=["X", "Y", "Z"]) # 將列堆疊為行(生成多級索引) stacked = df.stack() print(stacked) # 輸出: # X A 1 # B 4 # Y A 2 # B 5 # Z A 3 # B 6 # 恢復(fù)原形狀 unstacked = stacked.unstack() print(unstacked)
3. ?注意事項
?元素總數(shù)必須一致:否則會拋出 ValueError
。
?返回的是視圖(View)還是副本(Copy)?:
- NumPy 的
reshape
默認(rèn)返回視圖(修改視圖會影響原數(shù)組)。 - 若無法生成視圖(如內(nèi)存不連續(xù)),則返回副本。
?避免混淆 reshape
和 resize
:
reshape
不改變原數(shù)組,返回新形狀的數(shù)組。resize
直接修改原數(shù)組的形狀(可能導(dǎo)致數(shù)據(jù)截斷或填充)。
4. ?實際應(yīng)用場景
- ?圖像處理:將一維像素數(shù)組轉(zhuǎn)換為三維(高度, 寬度, 通道數(shù))。
- ?機(jī)器學(xué)習(xí):調(diào)整輸入數(shù)據(jù)的形狀以匹配模型要求(如將
(樣本數(shù),)
改為(樣本數(shù), 1)
)。 - ?數(shù)據(jù)清洗:將寬表轉(zhuǎn)換為長表(Pandas 的
melt
)。
5. ?常見錯誤
# 錯誤示例:元素總數(shù)不匹配 arr = np.array([1, 2, 3]) try: arr.reshape((2, 2)) # 3元素?zé)o法填充2x2=4的位置 except ValueError as e: print(e) # 輸出:cannot reshape array of size 3 into shape (2,2)
通過 reshape
,你可以靈活處理數(shù)據(jù)維度,適配不同算法和場景的需求。根據(jù)任務(wù)選擇 NumPy(多維數(shù)組)或 Pandas(表格數(shù)據(jù))的對應(yīng)方法。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python讀取文本中數(shù)據(jù)并轉(zhuǎn)化為DataFrame的實例
下面小編就為大家分享一篇python讀取文本中數(shù)據(jù)并轉(zhuǎn)化為DataFrame的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04使用Python & Flask 實現(xiàn)RESTful Web API的實例
下面小編就為大家?guī)硪黄褂肞ython & Flask 實現(xiàn)RESTful Web API的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09python從sqlite讀取并顯示數(shù)據(jù)的方法
這篇文章主要介紹了python從sqlite讀取并顯示數(shù)據(jù)的方法,涉及Python操作SQLite數(shù)據(jù)庫的讀取及顯示相關(guān)技巧,需要的朋友可以參考下2015-05-05Qt Quick QML-500行代碼實現(xiàn)合成大西瓜游戲
合成大西瓜游戲是前段時間比較火的小游戲,最近小編閑來無事,通過研究小球碰撞原理親自寫碰撞算法實現(xiàn)一個合成大西瓜游戲,下面小編把我的實現(xiàn)思路及核心代碼分析出來,供大家參考2021-05-05在Python下進(jìn)行UDP網(wǎng)絡(luò)編程的教程
這篇文章主要介紹了在Python下進(jìn)行UDP網(wǎng)絡(luò)編程的教程,UDP編程是Python網(wǎng)絡(luò)編程部分的基礎(chǔ)知識,示例代碼基于Python2.x版本,需要的朋友可以參考下2015-04-04Python?OpenCV實現(xiàn)簡單的顏色識別功能(對紅色和藍(lán)色識別并輸出)
Python?OpenCV可以用來進(jìn)行顏色識別,可以通過讀取圖像的像素值,來判斷像素點的顏色,從而實現(xiàn)顏色識別,這篇文章主要給大家介紹了關(guān)于Python?OpenCV實現(xiàn)簡單的顏色識別功能(對紅色和藍(lán)色識別并輸出)的相關(guān)資料,需要的朋友可以參考下2023-12-12