如何快速反轉Numpy數組

在Numpy中,對於一些二維和多維數組,在進行數據分析和模型訓練的時候,常常需要將其反轉,但是如果採用循環的方式實現數組的轉置是非常耗費時間的,本文將會介紹如何利用Numpy的內置函數,快速反轉Numpy數組。

一、矩陣的轉置

Numpy中提供了transpose()函數和T屬性,用於矩陣的轉置。transpose()函數和T屬性的效果是相同的,將矩陣的行和列交換。

import numpy as np

# 創建一個3行5列的矩陣
arr = np.arange(15).reshape((3,5))
print("原始矩陣:")
print(arr)

# 矩陣轉置
transpose_arr1 = arr.transpose() # 使用transpose()函數
transpose_arr2 = arr.T # 使用T屬性

print("轉置後的矩陣1:")
print(transpose_arr1)
print("轉置後的矩陣2:")
print(transpose_arr2)

代碼解析:

首先,我們導入了Numpy庫,並利用arange()和reshape()函數創建了一個3行5列的矩陣。接着,分別使用了transpose()函數和T屬性對矩陣進行轉置操作,並將結果打印出來。

執行結果如下:

原始矩陣:
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
轉置後的矩陣1:
array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])
轉置後的矩陣2:
array([[ 0,  5, 10],
       [ 1,  6, 11],
       [ 2,  7, 12],
       [ 3,  8, 13],
       [ 4,  9, 14]])

我們可以看到,經過轉置操作後,原始矩陣的行和列進行了交換,並且使用transpose()函數和T屬性得到的結果是相同的。

二、多維數組的轉置

對於多維數組,如果需要對指定的維度進行轉置,則需要使用到transpose()函數的另外一個參數——axes。通過傳遞一組軸編號,軸的順序將被重新排列。

import numpy as np

# 創建一個3x4x5的多維數組
arr = np.arange(60).reshape((3,4,5))
print("原始數組:")
print(arr)

# 對指定維度進行轉置
transpose_arr = np.transpose(arr, (0,2,1))

print("轉置後的數組:")
print(transpose_arr)

代碼解析:

首先,我們導入了Numpy庫,並利用arange()和reshape()函數創建了一個3x4x5的數組。我們想要對第二個維度進行轉置,也就是將每一個4×5的矩陣行列交換。因此,我們使用np.transpose()函數,並在第二個參數中傳入一個軸編號的元組(0,2,1)。這個元組指明了我們想要怎麼重新排序軸。

執行結果如下:

原始數組:
[[[ 0  1  2  3  4]
  [ 5  6  7  8  9]
  [10 11 12 13 14]
  [15 16 17 18 19]]

 [[20 21 22 23 24]
  [25 26 27 28 29]
  [30 31 32 33 34]
  [35 36 37 38 39]]

 [[40 41 42 43 44]
  [45 46 47 48 49]
  [50 51 52 53 54]
  [55 56 57 58 59]]]
轉置後的數組:
[[[ 0  5 10 15]
  [ 1  6 11 16]
  [ 2  7 12 17]
  [ 3  8 13 18]
  [ 4  9 14 19]]

 [[20 25 30 35]
  [21 26 31 36]
  [22 27 32 37]
  [23 28 33 38]
  [24 29 34 39]]

 [[40 45 50 55]
  [41 46 51 56]
  [42 47 52 57]
  [43 48 53 58]
  [44 49 54 59]]]

我們可以看到,對第二個維度進行轉置後,每個4×5的矩陣行和列互換了位置。

三、水平和垂直反轉

除了使用transpose()函數實現數組的轉置之外,Numpy還提供了flip()函數和flipud()函數,用於對數組進行水平和垂直反轉。其中flip()函數對所有維度上的元素進行反轉,而flipud()函數則只對第一個維度上的元素進行反轉。

import numpy as np

# 創建一個5x4的矩陣
arr = np.arange(20).reshape((5,4))
print("原始矩陣:")
print(arr)

# 水平反轉
flip_arr1 = np.fliplr(arr) # 使用fliplr()函數
flip_arr2 = arr[:, ::-1] # 使用切片操作

# 垂直反轉
flip_arr3 = np.flipud(arr) # 使用flipud()函數
flip_arr4 = arr[::-1, :] # 使用切片操作

print("水平反轉後的矩陣1:")
print(flip_arr1)
print("水平反轉後的矩陣2:")
print(flip_arr2)
print("垂直反轉後的矩陣1:")
print(flip_arr3)
print("垂直反轉後的矩陣2:")
print(flip_arr4)

代碼解析:

首先,我們導入了Numpy庫,並利用arange()和reshape()函數創建了一個5×4的矩陣。接着,分別使用了fliplr()函數、flipud()函數和切片操作,對矩陣進行了水平和垂直反轉,並將結果打印出來。

執行結果如下:

原始矩陣:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19]])
水平反轉後的矩陣1:
array([[ 3,  2,  1,  0],
       [ 7,  6,  5,  4],
       [11, 10,  9,  8],
       [15, 14, 13, 12],
       [19, 18, 17, 16]])
水平反轉後的矩陣2:
array([[ 3,  2,  1,  0],
       [ 7,  6,  5,  4],
       [11, 10,  9,  8],
       [15, 14, 13, 12],
       [19, 18, 17, 16]])
垂直反轉後的矩陣1:
array([[16, 17, 18, 19],
       [12, 13, 14, 15],
       [ 8,  9, 10, 11],
       [ 4,  5,  6,  7],
       [ 0,  1,  2,  3]])
垂直反轉後的矩陣2:
array([[16, 17, 18, 19],
       [12, 13, 14, 15],
       [ 8,  9, 10, 11],
       [ 4,  5,  6,  7],
       [ 0,  1,  2,  3]])

我們可以看到,對原始矩陣進行水平和垂直反轉後,結果分別和使用fliplr()函數、flipud()函數和切片操作得到的結果是相同的。

原創文章,作者:QNOCG,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/362693.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QNOCG的頭像QNOCG
上一篇 2025-02-27 19:28
下一篇 2025-02-27 19:28

相關推薦

  • Ojlat:一款快速開發Web應用程序的框架

    Ojlat是一款用於快速開發Web應用程序的框架。它的主要特點是高效、易用、可擴展且功能齊全。通過Ojlat,開發人員可以輕鬆地構建出高質量的Web應用程序。本文將從多個方面對Oj…

    編程 2025-04-29
  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Python去掉數組的中括號

    在Python中,被中括號包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括號。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python二維數組對齊輸出

    本文將從多個方面詳細闡述Python二維數組對齊輸出的方法與技巧。 一、格式化輸出 Python中提供了格式化輸出的方法,可以對輸出的字符串進行格式化處理。 names = [‘A…

    編程 2025-04-29
  • 二階快速求逆矩陣

    快速求逆矩陣是數學中的一個重要問題,特別是對於線性代數中的矩陣求逆運算,如果使用普通的求逆矩陣方法,時間複雜度為O(n^3),計算量非常大。因此,在實際應用中需要使用更高效的算法。…

    編程 2025-04-28
  • Java創建一個有10萬個元素的數組

    本文將從以下方面對Java創建一個有10萬個元素的數組進行詳細闡述: 一、基本介紹 Java是一種面向對象的編程語言,其強大的數組功能可以支持創建大規模的多維數組以及各種複雜的數據…

    編程 2025-04-28
  • Python數組隨機分組用法介紹

    Python數組隨機分組是一個在數據分析與處理中常用的技術,它可以將一個大的數據集分成若干組,以便於進行處理和分析。本文將從多個方面對Python數組隨機分組進行詳細的闡述,包括使…

    編程 2025-04-28
  • Python數組索引位置用法介紹

    Python是一門多用途的編程語言,它有着非常強大的數據處理能力。數組是其中一個非常重要的數據類型之一。Python支持多種方式來操作數組的索引位置,我們可以從以下幾個方面對Pyt…

    編程 2025-04-28

發表回復

登錄後才能評論