4.矩阵转置:
- numpy.ndarray.T
返回转置数组。进行矩阵运算时,经常要用数组转置。
>>> import numpy as np
>>> x = np.arange(1,5,dtype = np.float64).reshape(2,2)
>>> x
array([[1., 2.],
[3., 4.]])
>>> x.T # 二维数组的转置使得二维数组的行列发生对换
array([[1., 3.],
[2., 4.]])
>>> y = np.arange(1,5,dtype = np.float64)
>>> y
array([1., 2., 3., 4.])
>>> y.T # 一维数组的转置保持不变
array([1., 2., 3., 4.])
>>>
- numpy.transpose(a, axes=None)
使用轴交换来实现多维数组的转置。
参数: a -- 输入数组
axes(可选) -- 一个整数数列,默认情况下,反转维度,否则根据给定的值对轴进行交换。
返回值:ndarray -- 一个已交换了轴的数组
二维数组转置:
对于一个两行两列的二维数组,通过数组下标访问数据单元,给每个单元赋值,通过以下操作进行:
a[0][0] = 0
a[0][1] = 1
a[1][0] = 2
a[1][1] = 3
指定第一个方括号[]
为0轴
,第二个方括号[]
为1轴
,则建立了以0轴
为水平坐标、以1轴
为垂直坐标的0-1坐标系,如下图所示:
>>> x = np.arange(4).reshape((2,2)) # 创建数组对象,按照0-1坐标系初始化数组单元的值
>>> x
array([[0, 1],
[2, 3]])
>>> np.transpose(x,(0,1)) # axes参数为(0,1)时,表示按照原坐标轴改变序列,即保持不变,所以最后的结果不变。
array([[0, 1],
[2, 3]])
>>> np.transpose(x) # 不指定axes参数时,默认是数组转置
array([[0, 2],
[1, 3]])
>>> np.transpose(x,(1,0)) # axes参数为(1,0)时,表示交换 ‘0轴’ 和 ‘1轴’,其结果是数组转置。
array([[0, 2],
[1, 3]])
>>>
转置后,通过数组下标表达的单元数据为:
a[0][0] -> 0
a[0][1] -> 2
a[1][0] -> 1
a[1][1] -> 3
0轴
和 1轴
交换后的1-0坐标系,如下图所示:
无论何时,记住第一个方括号[]
及下标代表0轴 ,第二个方括号[]
及下标代表1轴。
三维数组转置:
>>> import numpy as np
>>> y = np.arange(16).reshape(2,2,4) # 第一个参数表示第几维,第二个参数表示该维第几行,第三个参数表示该行第几列
>>> y # 构建的数组对象可以理解为2个2*4的矩阵
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
>>>
三维数组对象创建并初始化后,其三维坐标系0-1-2表示如下:
针对三维数组对象分别进行不同形式的转置可通过坐标轴完成:
>>> np.transpose(y, (0,1,2)) # 坐标轴0-1-2没有变化,数组对象y保持不变
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
>>> np.transpose(y, (1,0,2)) # 坐标轴0与坐标轴1进行了交换,数组对象y发生变化
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
>>> np.transpose(y, (2,1,0)) # 坐标轴0与坐标轴2进行了交换,数组对象y发生变化
array([[[ 0, 8],
[ 4, 12]],
[[ 1, 9],
[ 5, 13]],
[[ 2, 10],
[ 6, 14]],
[[ 3, 11],
[ 7, 15]]])
>>>
坐标轴0与坐标轴1交换后的1-0-2坐标系如下所示: