Numpy:数组(Ndarray)操作之翻转操作


翻转数组

数组的翻转也是数组比较重要的操作之一,属于形状变化或维度变化的操作。可以通过以下方法实现,这些方法有属于ndarray的方法,也有属于numpy的方法。除此以外,数组的属性(ndarray.T)转置,也可以实现数组行列翻转的功能。

方法 说明
ndarray.transpose() 返回转置轴的数组视图
ndarray.T 数组转置
numpy.swapaxes() 返回交换了axis1和axis2的数组视图。
numpy.moveaxis() 将数组的轴移动到新位置。
numpy.rollaxis() 向后滚动指定的轴,直到它位于给定位置。

数组方法

ndarray.transpose()

返回转置轴的数组视图。

ndarray.transpose(*axes)

参数说明:

  • axes:可选None,整数元组或者n个整数。
    • None或无参数:反转轴的顺序。
    • 整数数组:元组中第j个位置的 i 表示a的第i个轴变为a.transpose()的第j个轴。
    • n个整数:这种形式与元组形式功能相同。

返回值:

  • 数组的视图。

如果看不懂参数的请看示例:

>>> a = np.array([[1, 2], [3, 4]])
>>> a
array([[1, 2],
       [3, 4]])
>>> a.transpose() # 无参数
array([[1, 3],
       [2, 4]])
>>> a.transpose((1, 0)) # 二维数组只有两个轴,0表示原数组的行,1表示原数组的列,将原来的列放在元组索引为0的位置变成行,将原来的行放在元组索引为1的位置变为列。
array([[1, 3],
       [2, 4]])
>>> a.transpose(1, 0) # 与元组功能相同,比较方便的一种写法。
array([[1, 3],
       [2, 4]])

同时也可以参考numpy.transpose(),功能与该函数相同,参数略有不同。

数组属性

数组中具有一个属性(ndarray.T)是转置的意思,将数组进行行列交换,示例如下:

>>> a = np.array([[1, 2], [3, 4]])
>>> a
array([[1, 2],
       [3, 4]])
>>> a.T
array([[1, 3],
       [2, 4]])

numpy方法

numpy.transpose()

numpy.transpose(a, axes=None)

参数说明:

  • a:array_like,输入数组
  • axes:整数元组或整数列表

返回值:

  • ndarray,视图

示例:

>>> x = np.arange(4).reshape((2,2))
>>> x
array([[0, 1],
       [2, 3]])
>>> np.transpose(x)
array([[0, 2],
       [1, 3]])

numpy.swapaxes()

numpy.swapaxes(a, axis1, axis2)

交换数组的两个轴。

参数说明:

  • a:接收array_like,输入数组。
  • axis1:接收整数,第一个轴。
  • axis2:接收整数,第二个轴。

返回值:

  • 交换轴后的ndarray

示例:

>>> x = np.array([[1,2,3]])
>>> x
array([[1, 2, 3]])
>>> np.swapaxes(x,0,1)
array([[1],
       [2],
       [3]])

ndarray.moveaxis()

将数组的轴移动到新位置。

numpy.moveaxis(a, source, destination)

参数说明:

  • a:接收ndarray,需要转动轴的数组。
  • source:接收整数或者整数序列。要移动的轴的原始位置,必须是唯一的。
  • destination:接收整数或者整数序列。每个原始轴的目标位置,也必须是唯一的。

返回值:

  • ndarray

示例:

>>> x = np.arange(1,61).reshape(3,4,5)
>>> x.shape
(3,4,5)
>>> x
array([[[ 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, 60]]])
>>> y = np.moveaxis(x, 0, -1) # 将原来0轴(3页)中的3移动到最后一个轴(列),也就是变成3列。
>>> y
array([[[ 1, 21, 41],
        [ 2, 22, 42],
        [ 3, 23, 43],
        [ 4, 24, 44],
        [ 5, 25, 45]],

       [[ 6, 26, 46],
        [ 7, 27, 47],
        [ 8, 28, 48],
        [ 9, 29, 49],
        [10, 30, 50]],

       [[11, 31, 51],
        [12, 32, 52],
        [13, 33, 53],
        [14, 34, 54],
        [15, 35, 55]],

       [[16, 36, 56],
        [17, 37, 57],
        [18, 38, 58],
        [19, 39, 59],
        [20, 40, 60]]])
>>> y.shape # 移动后的形状成4页,5行,3列   
(4, 5, 3)

numpy.rollaxis()

向后滚动指定的轴,直到它位于给定位置。

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

参数说明:

  • a:接收ndarray,输入数组。
  • axis:接收整数,需要滚动的轴。
  • start:可选,接收整数。

返回值:

  • ndarray的视图。

示例:

>>> a = np.ones((4,5,6)) # axis=0表示页,axis=1表示行,axis=2表示列
>>> np.rollaxis(a, 2, 1).shape # 将axis=2也就是列数6滚动到行axis=1也就是行
(4, 6, 5)

猜你喜欢

转载自blog.csdn.net/shield911/article/details/124229562