- ·上一篇内容:NumPy数组操作之修改数组形状
- ·下一篇内容:已经没有了
NumPy数组操作之数组转置
在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()函数等效,这里不再给出具体的例子。
微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。
个人成长离不开各位的关注,你的关注就是我继续前行的动力。