Python中reshape的使用詳解
Python中reshape的使用
在 Python 中,reshape 函數(shù)主要用于調(diào)整數(shù)組或矩陣的維度,?尤其常見(jiàn)于 NumPy 和 Pandas 庫(kù)。
以下是詳細(xì)的用法和示例:
1. ?NumPy 中的 reshape
NumPy 的 reshape 是調(diào)整數(shù)組維度的核心工具,適用于科學(xué)計(jì)算和多維數(shù)據(jù)處理。
基本語(yǔ)法
numpy.reshape(array, new_shape, order='C')
或直接調(diào)用數(shù)組對(duì)象的 reshape 方法:
arr.reshape(new_shape)
參數(shù)說(shuō)明
?**new_shape: 目標(biāo)形狀(如 (行, 列)),可以是整數(shù)或元組。
- 關(guān)鍵規(guī)則**:新形狀的元素總數(shù)必須與原數(shù)組一致(例如,原數(shù)組有 6 個(gè)元素,可改為
(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列(總元素?cái)?shù)必須為6) new_matrix = matrix.reshape((2, 3)) print(new_matrix) # 輸出: # [[1 2 3] # [4 5 6]]
- 示例 3:自動(dòng)推斷維度(使用
-1)
通過(guò) -1 自動(dòng)計(jì)算某一維的大?。?/p>
arr = np.array([1, 2, 3, 4, 5, 6]) # 自動(dòng)計(jì)算行數(shù)(總元素?cái)?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 主要通過(guò)以下方法實(shí)現(xiàn)數(shù)據(jù)重塑:
- ?**
stack()/unstack()**: 行列轉(zhuǎn)換。 - ?**
pivot()/melt()**: 寬表與長(zhǎng)表轉(zhuǎn)換。
示例:stack 和 unstack
import pandas as pd
# 創(chuàng)建一個(gè) DataFrame
df = pd.DataFrame({
"A": [1, 2, 3],
"B": [4, 5, 6]
}, index=["X", "Y", "Z"])
# 將列堆疊為行(生成多級(jí)索引)
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. ?注意事項(xiàng)
?元素總數(shù)必須一致:否則會(huì)拋出 ValueError。
?返回的是視圖(View)還是副本(Copy)?:
- NumPy 的
reshape默認(rèn)返回視圖(修改視圖會(huì)影響原數(shù)組)。 - 若無(wú)法生成視圖(如內(nèi)存不連續(xù)),則返回副本。
?避免混淆 reshape 和 resize:
reshape不改變?cè)瓟?shù)組,返回新形狀的數(shù)組。resize直接修改原數(shù)組的形狀(可能導(dǎo)致數(shù)據(jù)截?cái)嗷蛱畛洌?/li>
4. ?實(shí)際應(yīng)用場(chǎng)景
- ?圖像處理:將一維像素?cái)?shù)組轉(zhuǎn)換為三維(高度, 寬度, 通道數(shù))。
- ?機(jī)器學(xué)習(xí):調(diào)整輸入數(shù)據(jù)的形狀以匹配模型要求(如將
(樣本數(shù),)改為(樣本數(shù), 1))。 - ?數(shù)據(jù)清洗:將寬表轉(zhuǎn)換為長(zhǎng)表(Pandas 的
melt)。
5. ?常見(jiàn)錯(cuò)誤
# 錯(cuò)誤示例:元素總數(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)通過(guò) reshape,你可以靈活處理數(shù)據(jù)維度,適配不同算法和場(chǎng)景的需求。根據(jù)任務(wù)選擇 NumPy(多維數(shù)組)或 Pandas(表格數(shù)據(jù))的對(duì)應(yīng)方法。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用whisper實(shí)現(xiàn)語(yǔ)音識(shí)別(ASR)的示例代碼
Whisper是OpenAI的一個(gè)強(qiáng)大的語(yǔ)音識(shí)別庫(kù),支持離線(xiàn)的語(yǔ)音識(shí)別,本文主要介紹了Python使用whisper實(shí)現(xiàn)語(yǔ)音識(shí)別(ASR)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
python基礎(chǔ)教程項(xiàng)目三之萬(wàn)能的XML
這篇文章主要為大家詳細(xì)介紹了python基礎(chǔ)教程項(xiàng)目三之萬(wàn)能的XML,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
python基礎(chǔ)教程之類(lèi)class定義使用方法
Python中的類(lèi)(Class)是一個(gè)抽象的概念,比函數(shù)還要抽象,這也就是Python的核心概念,面對(duì)對(duì)象的編程方法(OOP),其它如:Java、C++等都是面對(duì)對(duì)象的編程語(yǔ)言2014-02-02
計(jì)算機(jī)二級(jí)python學(xué)習(xí)教程(3) python語(yǔ)言基本數(shù)據(jù)類(lèi)型
這篇文章主要為大家詳細(xì)介紹了計(jì)算機(jī)二級(jí)python學(xué)習(xí)教程的第3篇,python語(yǔ)言基本數(shù)據(jù)類(lèi)型,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
Python如何實(shí)現(xiàn)機(jī)器人聊天
這篇文章主要介紹了Python如何實(shí)現(xiàn)機(jī)器人聊天,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-09-09
簡(jiǎn)介Python設(shè)計(jì)模式中的代理模式與模板方法模式編程
這篇文章主要介紹了Python設(shè)計(jì)模式中的代理模式與模板方法模式編程,文中舉了兩個(gè)簡(jiǎn)單的代碼片段來(lái)說(shuō)明,需要的朋友可以參考下2016-02-02
Python新手學(xué)習(xí)函數(shù)默認(rèn)參數(shù)設(shè)置
在本篇文章里小編給大家分享的是關(guān)于Python新手學(xué)習(xí)函數(shù)默認(rèn)參數(shù)設(shè)置的相關(guān)知識(shí)點(diǎn),需要的朋友們可以參考下。2020-06-06
實(shí)例分析python3實(shí)現(xiàn)并發(fā)訪(fǎng)問(wèn)水平切分表
在本文中小編給大家整理了關(guān)于python3實(shí)現(xiàn)并發(fā)訪(fǎng)問(wèn)水平切分表的相關(guān)知識(shí)點(diǎn)以及實(shí)例代碼,有興趣的朋友們參考下。2018-09-09

