最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NumPy中數(shù)組的轉(zhuǎn)置Transpose的三種方法

 更新時(shí)間:2026年04月17日 10:01:33   作者:林深時(shí)見鹿1  
本文主要介紹了NumPy中數(shù)組轉(zhuǎn)置的基本概念、方法、應(yīng)用場(chǎng)景及注意事項(xiàng),針對(duì)二維與高維數(shù)組,提供了多種轉(zhuǎn)置方法,包括T、transpose、np.transpose,下面就來詳細(xì)的了解一下

一、數(shù)組轉(zhuǎn)置的核心定義

轉(zhuǎn)置是指調(diào)整數(shù)組維度的順序,并重新排列元素的存儲(chǔ)位置:

  • 對(duì)二維數(shù)組(矩陣):轉(zhuǎn)置就是 “行變列、列變行”(最直觀的場(chǎng)景);
  • 對(duì)高維數(shù)組(三維 / 四維):轉(zhuǎn)置是按指定順序重新排列維度(比如將 (維度0, 維度1, 維度2) 轉(zhuǎn)為 (維度2, 維度1, 維度0))。

NumPy 中實(shí)現(xiàn)轉(zhuǎn)置的核心方式有 3 種(等價(jià)但適用場(chǎng)景不同):

方式語(yǔ)法特點(diǎn)
數(shù)組屬性 Tarr.T最簡(jiǎn)潔,適合二維數(shù)組快速轉(zhuǎn)置
方法 transpose()arr.transpose(axes)靈活,可指定高維數(shù)組的維度順序
函數(shù) np.transpose()np.transpose(arr, axes)等價(jià)于 arr.transpose(),函數(shù)式寫法

二、基礎(chǔ)用法:二維數(shù)組轉(zhuǎn)置(最常用)

二維數(shù)組轉(zhuǎn)置是日常開發(fā)中最常見的場(chǎng)景,對(duì)應(yīng)數(shù)學(xué)中的 “矩陣轉(zhuǎn)置”。

示例 1:用arr.T快速轉(zhuǎn)置(推薦)

import numpy as np
# 原始二維數(shù)組(2行3列)
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print("原始數(shù)組:\n", arr_2d)
print("原始形狀:", arr_2d.shape)  # (2, 3)
# 轉(zhuǎn)置(行變列、列變行)
arr_T = arr_2d.T
print("\n轉(zhuǎn)置后數(shù)組:\n", arr_T)
print("轉(zhuǎn)置后形狀:", arr_T.shape)  # (3, 2)

輸出結(jié)果

原始數(shù)組:
 [[1 2 3]
 [4 5 6]]
原始形狀: (2, 3)
 
轉(zhuǎn)置后數(shù)組:
 [[1 4]
 [2 5]
 [3 6]]
轉(zhuǎn)置后形狀: (3, 2)

示例 2:用transpose()轉(zhuǎn)置(等價(jià)于T)

# 二維數(shù)組轉(zhuǎn)置時(shí),transpose() 無(wú)參數(shù)等價(jià)于 arr.T
arr_trans = arr_2d.transpose()
print("transpose() 轉(zhuǎn)置結(jié)果:\n", arr_trans)  # 和 arr.T 完全一致

三、進(jìn)階用法:高維數(shù)組轉(zhuǎn)置(核心是維度順序)

高維數(shù)組(三維 / 四維)的轉(zhuǎn)置不再是簡(jiǎn)單的 “行變列”,而是按指定的維度順序重新排列,這是新手最易混淆的點(diǎn)。

先明確:高維數(shù)組的維度編號(hào)

NumPy 數(shù)組的維度從 0 開始編號(hào),比如:

  • 三維數(shù)組形狀 (2, 3, 4) → 維度 0=2、維度 1=3、維度 2=4;
  • 可理解為:(樣本數(shù), 行數(shù), 列數(shù))(通道數(shù), 高度, 寬度)(圖像場(chǎng)景)。

示例 1:三維數(shù)組轉(zhuǎn)置(默認(rèn)順序)

transpose() 無(wú)參數(shù)時(shí),高維數(shù)組會(huì)反轉(zhuǎn)維度順序(比如 (0,1,2)(2,1,0)):

import numpy as np
# 原始三維數(shù)組:形狀 (2, 3, 4) → 維度0=2,維度1=3,維度2=4
arr_3d = np.arange(24).reshape(2, 3, 4)
print("原始三維數(shù)組:\n", arr_3d)
print("原始形狀:", arr_3d.shape)  # (2, 3, 4)
# 無(wú)參數(shù)轉(zhuǎn)置:維度順序反轉(zhuǎn) (2,1,0) → 形狀 (4, 3, 2)
arr_3d_T = arr_3d.transpose()
print("\n轉(zhuǎn)置后形狀:", arr_3d_T.shape)  # (4, 3, 2)

示例 2:指定維度順序轉(zhuǎn)置(核心?。?/h3>

通過 transpose(axes) 參數(shù)指定維度順序,實(shí)現(xiàn)靈活的維度調(diào)整:

import numpy as np
arr_3d = np.arange(24).reshape(2, 3, 4)  # 維度0=2,維度1=3,維度2=4
# 需求:將維度順序改為 (1, 0, 2) → 形狀 (3, 2, 4)
arr_3d_trans1 = arr_3d.transpose(1, 0, 2)
print("維度順序 (1,0,2) → 形狀:", arr_3d_trans1.shape)  # (3, 2, 4)
# 需求:將維度順序改為 (0, 2, 1) → 形狀 (2, 4, 3)
arr_3d_trans2 = arr_3d.transpose(0, 2, 1)
print("維度順序 (0,2,1) → 形狀:", arr_3d_trans2.shape)  # (2, 4, 3)

實(shí)戰(zhàn)場(chǎng)景:圖像數(shù)據(jù)轉(zhuǎn)置(計(jì)算機(jī)視覺)

圖像數(shù)據(jù)常見維度順序有兩種:

  • (高度, 寬度, 通道)(HWC,如 PIL/OpenCV);
  • (通道, 高度, 寬度)(CHW,如 PyTorch)。

轉(zhuǎn)置可快速切換這兩種格式:

import numpy as np
# 模擬圖像數(shù)據(jù):2張圖片 × 32高度 × 32寬度 × 3通道(HWC格式,形狀 (2,32,32,3))
img_hwc = np.random.randint(0, 255, (2, 32, 32, 3))
print("HWC格式形狀:", img_hwc.shape)  # (2, 32, 32, 3)
# 轉(zhuǎn)置為CHW格式:維度順序 (0, 3, 1, 2) → 形狀 (2, 3, 32, 32)
img_chw = img_hwc.transpose(0, 3, 1, 2)
print("CHW格式形狀:", img_chw.shape)  # (2, 3, 32, 32)

四、轉(zhuǎn)置的核心特性:視圖(共享內(nèi)存)

reshape(-1) 類似,轉(zhuǎn)置返回的是原數(shù)組的視圖(View),而非新數(shù)組 —— 修改轉(zhuǎn)置后的數(shù)組,會(huì)同步修改原數(shù)組(核心避坑點(diǎn)?。?。

示例:驗(yàn)證共享內(nèi)存

import numpy as np
arr = np.array([[1, 2], [3, 4]])
arr_T = arr.T  # 轉(zhuǎn)置視圖
# 修改轉(zhuǎn)置后的數(shù)組
arr_T[0, 1] = 99
print("轉(zhuǎn)置數(shù)組修改后:\n", arr_T)
print("原數(shù)組同步修改:\n", arr)  # 原數(shù)組的 [1,1] 位置變?yōu)?9

輸出結(jié)果

轉(zhuǎn)置數(shù)組修改后:
 [[ 1 99]
 [ 2  4]]
原數(shù)組同步修改:
 [[ 1  2]
 [99  4]]

解決方法:若需要獨(dú)立的轉(zhuǎn)置數(shù)組,添加 .copy()

arr_T_indep = arr.T.copy()
arr_T_indep[0,1] = 0
print("獨(dú)立轉(zhuǎn)置數(shù)組修改后,原數(shù)組:\n", arr)  # 原數(shù)組不變

五、轉(zhuǎn)置的常見應(yīng)用場(chǎng)景

場(chǎng)景 1:矩陣運(yùn)算(線性代數(shù))

矩陣乘法要求 “第一個(gè)矩陣的列數(shù) = 第二個(gè)矩陣的行數(shù)”,轉(zhuǎn)置是調(diào)整維度的關(guān)鍵:

import numpy as np
# 矩陣A:2行3列
A = np.array([[1,2,3], [4,5,6]])
# 矩陣B:3行2列(A的轉(zhuǎn)置)
B = A.T
# 矩陣乘法:A × B → 2行2列
C = np.dot(A, B)
print("A × A.T 的結(jié)果:\n", C)

場(chǎng)景 2:數(shù)據(jù)按列 / 行統(tǒng)計(jì)

轉(zhuǎn)置可將 “按行存儲(chǔ)” 的數(shù)據(jù)轉(zhuǎn)為 “按列存儲(chǔ)”,方便統(tǒng)計(jì):

import numpy as np
# 原始數(shù)據(jù):31天×24小時(shí)溫度(按行存儲(chǔ),每行是1天)
temp = np.random.normal(5, 6, (31, 24)).round(1)
# 需求:統(tǒng)計(jì)每小時(shí)的平均溫度(按列統(tǒng)計(jì))
# 方法1:直接按列統(tǒng)計(jì)
hour_mean1 = temp.mean(axis=0)
# 方法2:轉(zhuǎn)置后按行統(tǒng)計(jì)(等價(jià))
hour_mean2 = temp.T.mean(axis=1)
print("每小時(shí)平均溫度(方法1):", hour_mean1[:5])
print("每小時(shí)平均溫度(方法2):", hour_mean2[:5])  # 結(jié)果一致

場(chǎng)景 3:廣播配合轉(zhuǎn)置

轉(zhuǎn)置可調(diào)整數(shù)組形狀,讓廣播更靈活:

import numpy as np
# 數(shù)組A:2行3列
A = np.array([[1,2,3], [4,5,6]])
# 數(shù)組B:2個(gè)元素(想按列和A相加)
B = np.array([10, 20])
# 直接相加:B會(huì)被廣播為(2,1),和A的(2,3)相加 → 每行加對(duì)應(yīng)值
# 需求:每列加對(duì)應(yīng)值 → 先轉(zhuǎn)置A,相加后再轉(zhuǎn)置
A_T = A.T + B  # A.T是(3,2),B是(2,) → 廣播為(3,2),逐行相加
A_new = A_T.T
print("每列加對(duì)應(yīng)值的結(jié)果:\n", A_new)

輸出結(jié)果

每列加對(duì)應(yīng)值的結(jié)果:
 [[11 12 13]
 [24 25 26]]

六、避坑點(diǎn)與最佳實(shí)踐

1. 核心避坑點(diǎn)

  • ? 誤區(qū):轉(zhuǎn)置會(huì)創(chuàng)建新數(shù)組(實(shí)際是視圖,共享內(nèi)存,需獨(dú)立則加 .copy());
  • ? 誤區(qū):高維數(shù)組轉(zhuǎn)置無(wú)參數(shù)時(shí)和二維一樣(實(shí)際是反轉(zhuǎn)維度順序);
  • ? 錯(cuò)誤:指定無(wú)效的維度順序(如三維數(shù)組指定 transpose(3,1,2),維度編號(hào)超出范圍);
  • ? 混淆:轉(zhuǎn)置和 reshape(轉(zhuǎn)置改變?cè)嘏帕?,reshape 僅改變形狀,元素順序不變)。

2. 最佳實(shí)踐

  • ? 二維數(shù)組轉(zhuǎn)置優(yōu)先用 arr.T(簡(jiǎn)潔高效);
  • ? 高維數(shù)組轉(zhuǎn)置明確維度順序(如 transpose(0,3,1,2)),避免依賴默認(rèn)反轉(zhuǎn);
  • ? 需獨(dú)立數(shù)組時(shí),轉(zhuǎn)置后加 .copy();
  • ? 驗(yàn)證轉(zhuǎn)置結(jié)果:通過 shape 屬性檢查維度是否符合預(yù)期。

總結(jié)

  1. 數(shù)組轉(zhuǎn)置核心是調(diào)整維度順序:二維數(shù)組是 “行變列”,高維數(shù)組是按指定順序重排維度;
  2. 實(shí)現(xiàn)方式:arr.T(二維首選)、arr.transpose(axes)(高維靈活)、np.transpose()(函數(shù)式);
  3. 核心特性:轉(zhuǎn)置返回視圖(共享內(nèi)存),修改會(huì)同步影響原數(shù)組,需獨(dú)立則加 .copy();
  4. 常用場(chǎng)景:矩陣運(yùn)算、圖像格式轉(zhuǎn)換、廣播配合調(diào)整維度、按列 / 行統(tǒng)計(jì)數(shù)據(jù);
  5. 避坑關(guān)鍵:區(qū)分轉(zhuǎn)置和 reshape,高維轉(zhuǎn)置明確維度順序,驗(yàn)證形狀是否符合預(yù)期。

到此這篇關(guān)于NumPy中數(shù)組的轉(zhuǎn)置Transpose的三種方法的文章就介紹到這了,更多相關(guān)NumPy數(shù)組轉(zhuǎn)置Transpose內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python反射操作對(duì)象屬性方法詳解

    Python反射操作對(duì)象屬性方法詳解

    這篇文章主要介紹了Python反射操作對(duì)象屬性方法詳解,在Python面對(duì)對(duì)象中,通過字符串的形式去操作對(duì)象的屬性方法就稱之為反射(在Python中一切事物都是可以為對(duì)象),需要的朋友可以參考下
    2023-08-08
  • sklearn中的交叉驗(yàn)證的實(shí)現(xiàn)(Cross-Validation)

    sklearn中的交叉驗(yàn)證的實(shí)現(xiàn)(Cross-Validation)

    這篇文章主要介紹了sklearn中的交叉驗(yàn)證的實(shí)現(xiàn)(Cross-Validation),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python統(tǒng)計(jì)文本文件內(nèi)單詞數(shù)量的方法

    python統(tǒng)計(jì)文本文件內(nèi)單詞數(shù)量的方法

    這篇文章主要介紹了python統(tǒng)計(jì)文本文件內(nèi)單詞數(shù)量的方法,涉及Python針對(duì)文本文件及字符串的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05
  • 基于OpenCV實(shí)現(xiàn)動(dòng)態(tài)畫矩形和多邊形并保存坐標(biāo)

    基于OpenCV實(shí)現(xiàn)動(dòng)態(tài)畫矩形和多邊形并保存坐標(biāo)

    這篇文章主要為大家詳細(xì)介紹了如何利用OpenCV實(shí)現(xiàn)動(dòng)態(tài)畫矩形和多邊形并保存坐標(biāo),文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以參考一下
    2023-03-03
  • Python生成隨機(jī)數(shù)詳解流程

    Python生成隨機(jī)數(shù)詳解流程

    生成隨機(jī)數(shù)一般使用的就是random模塊下的函數(shù),生成的隨機(jī)數(shù)并不是真正意義上的隨機(jī)數(shù),而是對(duì)隨機(jī)數(shù)的一種模擬。random模塊包含各種偽隨機(jī)數(shù)生成函數(shù),以及各種根據(jù)概率分布生成隨機(jī)數(shù)的函數(shù)。今天我們的目標(biāo)就是摸清隨機(jī)數(shù)有幾種生成方式
    2022-03-03
  • Python環(huán)境隔離實(shí)戰(zhàn)之venv/virtualenv與conda的差異與最佳實(shí)踐

    Python環(huán)境隔離實(shí)戰(zhàn)之venv/virtualenv與conda的差異與最佳實(shí)踐

    Python虛擬環(huán)境到底是什么,它如何隔離依賴并工作,在實(shí)際開發(fā)中,我們?cè)撊绾蝿?chuàng)建、使用和切換環(huán)境,以避免版本沖突,下面小編就帶大家深入了解一下吧
    2025-08-08
  • python中的變量命名規(guī)則詳情

    python中的變量命名規(guī)則詳情

    這篇文章主要介紹了python中的變量命名規(guī)則詳情,變量名可以包括字母、數(shù)字、下劃線,但是數(shù)字不能做為開頭,變量用的好或不好,和代碼質(zhì)量有著非常重要的聯(lián)系,合理的使用變量,可以讓你的代碼可讀性更高并且更加簡(jiǎn)潔,下面相關(guān)內(nèi)容吧需要的小伙伴可以參考一下
    2022-03-03
  • Python常用的數(shù)據(jù)清洗方法詳解

    Python常用的數(shù)據(jù)清洗方法詳解

    這篇文章主要介紹了Python常用的數(shù)據(jù)清洗方法,在數(shù)據(jù)處理的過程中,一般都需要進(jìn)行數(shù)據(jù)的清洗工作,如數(shù)據(jù)集是否存在重復(fù)、是否存在缺失、數(shù)據(jù)是否具有完整性和一致性、數(shù)據(jù)中是否存在異常值等,需要的朋友可以參考下
    2023-07-07
  • Python連接和操作Elasticsearch的詳細(xì)指南

    Python連接和操作Elasticsearch的詳細(xì)指南

    Elasticsearch 是一個(gè)強(qiáng)大的搜索引擎,廣泛應(yīng)用于數(shù)據(jù)存儲(chǔ)和搜索場(chǎng)景,通過 Python,我們可以方便地與 Elasticsearch 進(jìn)行交互,本文將詳細(xì)介紹如何在本地使用 Python 連接到服務(wù)器上的 Elasticsearch,并進(jìn)行基本的操作,需要的朋友可以參考下
    2024-12-12
  • python pygame實(shí)現(xiàn)五子棋小游戲

    python pygame實(shí)現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了python pygame實(shí)現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評(píng)論

巴青县| 漳平市| 稻城县| 扎囊县| 厦门市| 台湾省| 曲靖市| 太白县| 彰武县| 高邮市| 江城| 灵寿县| 赤城县| 敦煌市| 同仁县| 盐池县| 工布江达县| 滨海县| 曲松县| 仙桃市| 天镇县| 红安县| 涞水县| 怀化市| 秀山| 綦江县| 东城区| 叙永县| 寿阳县| 潮州市| 抚顺县| 自治县| 绥棱县| 德阳市| 平利县| 林西县| 彭泽县| 五华县| 满城县| 崇礼县| 佳木斯市|