其他分享
首页 > 其他分享> > 11,数组转置和轴对换

11,数组转置和轴对换

作者:互联网

# 11,数组转置和轴对换
# 转置 是 重塑的一种特殊形式,它返回的是源数据的视图(不会进行任何复制操作)
# 数组不仅有transpose的方法,它还有一个特殊的T属性
arr = np.arange(15).reshape((3, 5))
print("arr:\n", arr)
print('\narr.T:\n', arr.T)
# 进行矩阵计算时,经常需要用到该操作,比如利用np.dot计算矩阵内积 x.T * x (点积)
arr = np.random.randn(6, 3)
print("\n点积(内积):\n",np.dot(arr, arr.T))
arr:
 [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]

arr.T:
 [[ 0  5 10]
 [ 1  6 11]
 [ 2  7 12]
 [ 3  8 13]
 [ 4  9 14]]

点积(内积):
 [[ 1.9174895   1.49777998 -1.87074116 -0.03645364  1.0328319   1.72957686]
 [ 1.49777998  2.53674719 -1.35736316 -1.52906335  2.72241919  2.07011927]
 [-1.87074116 -1.35736316  4.04714969  3.92835853 -0.3544409  -2.99845626]
 [-0.03645364 -1.52906335  3.92835853  8.89932997 -1.20421928 -3.29390032]
 [ 1.0328319   2.72241919 -0.3544409  -1.20421928  3.35758917  1.62641291]
 [ 1.72957686  2.07011927 -2.99845626 -3.29390032  1.62641291  2.78082933]]
# 对于高维数组,transpose需要得到一个由轴编号组成的元祖才能对这些轴进行转置
# transpose是什么鬼呀。完全理解不了!!!
arr = np.arange(16).reshape((2, 2, 4))
print("arr:\n", arr)
print('\narr.transpose((1, 0, 2)):\n', arr.transpose((1, 0, 2)))
arr:
 [[[ 0  1  2  3]
  [ 4  5  6  7]]

 [[ 8  9 10 11]
  [12 13 14 15]]]

arr.transpose((1, 0, 2)):
 [[[ 0  1  2  3]
  [ 8  9 10 11]]

 [[ 4  5  6  7]
  [12 13 14 15]]]
# 简单的转置可以使用.T,它其实就是进行轴对称而已。ndarray还有一个swapaxes方法,它需要一对轴编号:
print("arr:\n", arr)
print('\narr.swapaxes(1, 2):\n', arr.swapaxes(1, 2))
arr:
 [[[ 0  1  2  3]
  [ 4  5  6  7]]

 [[ 8  9 10 11]
  [12 13 14 15]]]

arr.swapaxes(1, 2):
 [[[ 0  4]
  [ 1  5]
  [ 2  6]
  [ 3  7]]

 [[ 8 12]
  [ 9 13]
  [10 14]
  [11 15]]]

标签:11,10,arr,转置,对换,transpose,13,print
来源: https://blog.csdn.net/weixin_42752585/article/details/95967617