转置(transpose)是重塑的一种特殊形式,它返回的是源数据的视图(不会进行任何复制操作)。数组不仅有transpose方法,还有一个特殊的T属性。
In[70]:arr=np.arange(15).reshape((3,5))
In[71]:arr
Out[71]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
In[72]:arr.T
Out[72]:
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
在进行矩阵计算时,经常需要用到该操作,比如利用np.dot计算矩阵内积XTX:
In[73]:arr=np.random.randn(6,3)
In[74]:np.dot(arr.T,arr)
Out[74]:
array([[ 14.91087193, -7.57347777, -0.56395378],
[ -7.57347777, 6.79559058, 3.99068128],
[ -0.56395378, 3.99068128, 9.8351215 ]])
对于高维数组,transpose需要得到一个由轴编号组成的元组才能对这些轴进行转置(比较费脑子):
In[75]:arr=np.arange(16).reshape((2,2,4))
In[76]:arr
Out[76]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
In[77]:arr.transpose((1,0,2))
Out[77]:
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
简单的转置可以使用.T,它其实就是进行轴对换而已。Ndarray还有一个swapaxes方法,它需要接受一对轴编号。
In[78]:arr
Out[78]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
In[79]:arr.swapaxes(1,2)
Out[80]:
array([[[ 0, 4],
[ 1, 5],
[ 2, 6],
[ 3, 7]],
[[ 8, 12],
[ 9, 13],
[10, 14],
[11, 15]]])
swapaxes也是返回源数据的视图(不会进行任何复制操作)。
亲,如果笔记对您有帮助,收藏的同时,记得给点个赞、加个关注哦!感谢!」
「诚邀关注“issnail”,会有惊喜哦!」
「文中代码均亲测过,若有错误之处,欢迎批评指正,一起学习,一起成长!」
参考书目:利用python进行数据分析