首 页IT知识库收藏内容
当前位置:翔宇亭IT乐园IT知识库Numpy

NumPy数组操作之数组转置

减小字体 增大字体 作者:本站  来源:本站整理  发布时间:2025-08-08 21:09:51

在NumPy中,可以运用numpy.transpose()等函数实现数组维度的变换。

类似这样操作的函数主要包括以下几种:

序号 函数或操作 描述
1 numpy.transpose()  按照指定的顺序重新排列数组的轴
2 ndarray.T  反转数组的轴
3 numpy.moveaxis()  将指定的轴移动到特定位置
4 numpy.rollaxis()  将指定的轴移动到目标位置
5 numpy.swapaxes()  交换数组两个指定的轴
6 numpy.permute_dims()  按照指定的顺序重新排列数组的轴

下面将一一介绍各个函数的具体语法及使用方法。

1. numpy.transpose()

该函数实现对数组的轴进行对换。

对于一维数组来说,它只有一个轴,所以该函数仅返回原数组的视图。

对于二维数组来说,就是相当于矩阵的转置。

对于二维以上的数组,如果提供了axes参数,则参数给出了轴置换的方式。如果未给出axes参数,则transpose(a).shape == a.shape[::-1]。

numpy.transpose函数的语法形式如下所示:

numpy.transpose(a, axes=None)

其参数含义描述如下:

a - 要进行操作的数组

axes - 可选参数,其值是一个元组或整数列表。

下面使用例子来说明numpy.transpose()函数的具体使用过程。

下面是一个一维数组的例子

import numpy as np
a = np.array([1, 2, 3, 4])
print('原数组:', a)
print('转换后:', np.transpose(a))

输出结果如下:

原数组: [1 2 3 4]
转换后: [1 2 3 4]

下面是一个二维数组的例子:

import numpy as np
a = np.array([[1, 2], [3, 4]])
print('原数组:')
print(a)
arr1 = np.transpose(a)
print('转换后:')
print(arr1)

输出结果如下所示:

原数组:
[[1 2]
 [3 4]]
转换后:
[[1 3]
 [2 4]]

下面是一个三维数组的例子:

import numpy as np
a = np.array([[[11, 12, 13], [21, 22, 23]],
              [[31, 32, 33], [41, 42, 43]],
              [[51, 52, 53], [61, 62, 63]]])
print('原数组:')
print(a)
arr1 = np.transpose(a)
print('转转后(未指定axes):')
print(arr1)
arr2 = np.transpose(a, (-1, 0, -2))
print('转换后,指定axes=(-1,0,-2):')
print(arr2)

输出结果如下:

原数组:
[[[11 12 13]
  [21 22 23]]

 [[31 32 33]
  [41 42 43]]

 [[51 52 53]
  [61 62 63]]]
转转后(未指定axes):
[[[11 31 51]
  [21 41 61]]

 [[12 32 52]
  [22 42 62]]

 [[13 33 53]
  [23 43 63]]]
转换后,指定axes=(-1,0,-2):
[[[11 21]
  [31 41]
  [51 61]]

 [[12 22]
  [32 42]
  [52 62]]

 [[13 23]
  [33 43]
  [53 63]]]

2. ndarray.T

ndarray.T的作用与numpy.transpose()函数的作用相同。

下面举例子来说明其具体使用方法。

import numpy as np

a = np.array([1, 2, 3, 4])
print('原数组:', a)
print('转换后:', a.T)

b = np.array([[11, 12, 13], [21, 22, 23]])
print('原数组:\n', b)
print('转换后:\n', b.T)

c = np.array([[[11, 12, 13], [21, 22, 23]],
              [[31, 32, 33], [41, 42, 43]],
              [[51, 52, 53], [61, 62, 63]]])
print('原数组:\n', c)
print('转换后:\n', c.T)

输出结果如下:

原数组: [1 2 3 4]
转换后: [1 2 3 4]
原数组:
[[11 12 13]
 [21 22 23]]
转换后:
[[11 21]
 [12 22]
 [13 23]]
原数组:
[[[11 12 13]
  [21 22 23]]

 [[31 32 33]
  [41 42 43]]

 [[51 52 53]
  [61 62 63]]]
转换后:
[[[11 31 51]
  [21 41 61]]

 [[12 32 52]
  [22 42 62]]

 [[13 33 53]
  [23 43 63]]]

3. numpy.moveaxis()

numpy.moveaxis()函数的作用是将数组的轴移动到一个新位置,其它轴保持原有顺序。

其语法格式如下:

numpy.moveaxis(a, source, destination)

各参数的含义描述如下:

a - 需要移动轴位置的数组

source - 一个整数或整数序列,用于指定被移动轴的原始位置。指定的值必须是唯一的。

destination - 一个整数或整数序列,用于指定轴被移动到的目的位置。指定的值必须是唯一的。

该函数返回的是轴位置发生变化的,原数组的一个视图。

下面是numpy.moveaxis()函数使用的例子。

import numpy as np
a = np.array([[11, 12, 13], [21, 22, 23]])
print('原数组:\n', a)
arr1 = np.moveaxis(a, 0, -1)
print('操作之后:\n', arr1)

执行结果如下所示:

原数组:
[[11 12 13]
 [21 22 23]]
操作之后:
[[11 21]
 [12 22]
 [13 23]]

下面是一个三维数组的例子:

import numpy as np
a = np.array([[[111, 112, 113],[121, 122, 123]],
              [[211, 212, 213], [221, 222, 223]],
              [[311, 312, 313], [321, 322, 323]]])
print('原数组:\n', a)

arr1 = np.moveaxis(a, [0, 1], [1, 2])
print('arr1=\n', arr1)

arr2 = np.moveaxis(a, [-1, 1],[0, 2])
print('arr2=\n', arr2)

输出结果如下:

原数组:
[[[111 112 113]
  [121 122 123]]

 [[211 212 213]
  [221 222 223]]

 [[311 312 313]
  [321 322 323]]]
arr1=
[[[111 121]
  [211 221]
  [311 321]]

 [[112 122]
  [212 222]
  [312 322]]

 [[113 123]
  [213 223]
  [313 323]]]
arr2=
[[[111 121]
  [211 221]
  [311 321]]

 [[112 122]
  [212 222]
  [312 322]]

 [[113 123]
  [213 223]
  [313 323]]]

4. numpy.rollaxis()

numpy.rollaxis()函数是将数组特定的轴向后滚动到给定的位置。

其语法格式如下:

numpy.rollaxis(a, axis, start=0)

各参数的含义描述如下:

a - 被操作的数组

axis - 一个整数值,指被滚动的轴。其它轴的位置彼此之间保持不动。

start - 可选参数,一个整数值,指定轴停留的位置。

   当start <= axis 时,指定的轴向后滚到该位置为止;当 start > axis 时,指定的轴向后滚动到该位置之前的位置。

下面使用例子来说明该函数的具体使用过程。

import numpy as np

a = np.arange(24).reshape(2, 3, 4)
print('原数组:')
print(a)

print('将最后一个轴滚动到前边:')
arr = np.rollaxis(a, 2)
print('操作后数组的形状:', arr.shape)
print(arr)

输出结果如下:

原数组:
[[[ 0   1   2   3]
  [ 4   5   6   7]
  [ 8   9  10  11]]

 [[12  13  14  15]
  [16  17  18  19]
  [20  21  22  23]]]
将最后一个轴滚动到前边:
操作后数组的形状: (4, 2, 3)
[[[ 0   4   8]
  [12  16  20]]

 [[ 1   5   9]
  [13  17  21]]

 [[ 2   6  10]
  [14  18  22]]

 [[ 3   7  11]
  [15  19  23]]]

下面是一个四维数组的例子:

import numpy as np
a = np.ones((3, 4, 5, 6))

arr1 = np.rollaxis(a, 3, 1)
print(arr1.shape)

arr2 = np.rollaxis(a, 2)
print(arr2.shape)

arr3 = np.rollaxis(a, 1, 4)
print(arr3.shape)

输出结果如下:

(3, 6, 4, 5)
(5, 3, 4, 6)
(3, 5, 6, 4)

5. numpy.swapaxes()

numpy.swapaxes()函数的作用是交换数组的两个轴。

其语法格式如下:

numpy.swapaxes(a, axis1, axis2)

各参数的含义描述如下:

a - 被操作的数组

axis1 - 用于交换的第一个轴

axis2 - 用于交换的第二个轴

下面演示了numpy.swapaxes()函数的使用方法。

import numpy as np
a = np.array([[1, 2, 3]])
print('原数组:')
print(a)
print('交换0和1轴:')
print(np.swapaxes(a, 0, 1))

执行结果如下所示:

原数组:
[[1 2 3]]
交换0和1轴:
[[1]
 [2]
 [3]]

下面是一个三维数组的例子:

import numpy as np
a = np.arange(8).reshape((2, 2, 2))
print('原数组:')
print(a)
print('交换0和2轴:')
arr = np.swapaxes(a, 0, 2)
print(arr)

执行结果如下:

原数组:
[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]
交换0和2轴:
[[[0 4]
  [2 6]]

 [[1 5]
  [3 7]]]

6. numpy.permute_dims()

该函数的作用是转置数组的轴,其与numpy.transpose()函数等效。

该函数的语法格式如下:

numpy.permute_dims(a, axes=None)

各参数的含义:

a - 进行操作的数组

axes - 可选参数,整数的列表或元组,指定要进行转置的轴。

因为numpy.permute_dims()函数与numpy.transpose()函数等效,这里不再给出具体的例子。

微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。

个人成长离不开各位的关注,你的关注就是我继续前行的动力。

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
愿您的精彩评论引起共鸣,带来思考和价值。
用户名: 查看更多评论
分 值:100分 90分 80分 70分 60分 40分 20分
内 容:
验证码:
关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2024 biye5u.com. All Rights Reserved.