numpy轴变化和np.transpose的通用理解

np.transpose

import numpy as np

a = np.arange(24).reshape(2, 3, 4)
print(a)
# 替换的是原来的位置形状
# [[[ 0  1  2  3]
#   [ 4  5  6  7]
#   [ 8  9 10 11]]
#
#  [[12 13 14 15]
#   [16 17 18 19]
#   [20 21 22 23]]]
print("维度0的0部分", a[0])
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]
print("维度1的0部分", a[:, 0])
# [[0  1  2  3]
#  [12 13 14 15]]
print("维度2的0部分", a[:, :, 0])
# [[ 0  4  8]
#  [12 16 20]]
# 和原a比较加上思考可发现每个维度有其本身的位置
print(np.transpose(a, [0, 2, 1]))
# 其实就是维度0的位置形状不变,交换其每部分里面维度1和维度2的位置(形状)
# 如维度0 0部分的值[[ 0  1  2  3] [ 4  5  6  7] [ 8  9 10 11]]中交换维度1和维度2的位置,
# 等于维度0的0部分做转置,得到
# [[ 0  4  8]
#  [ 1  5  9]
#  [ 2  6 10]
#  [ 3  7 11]]
# 维度0剩余部分同理,可得:

# [[[ 0  4  8]
#   [ 1  5  9]
#   [ 2  6 10]
#   [ 3  7 11]]
#
#  [[12 16 20]
#   [13 17 21]
#   [14 18 22]
#   [15 19 23]]]
print(np.transpose(a, [2,1,0]))
# 取出维度2的0部分内容:[[0 4 8] [12 16 20]]将其放到维度0的位置
# [[0 4 8]
#  [12 16 20]]
# 同时 1,0维度与原始顺序相比也变化了,同上面分析取出此时0位置的数据做转置
# 得到:
# [[ 0 12]
#   [ 4 16]
#   [ 8 20]]
# 取出维度2的1部分内容:[[1 5 9] [13 17 21]]将其放到维度0的位置
# [[1 5 9]
#  [13 17 21]]
# 做转置:
# [[ 1 13]
#   [ 5 17]
#   [ 9 21]]
# 最终得到:
# [[[ 0 12]
#   [ 4 16]
#   [ 8 20]]
#
#  [[ 1 13]
#   [ 5 17]
#   [ 9 21]]
#
#  [[ 2 14]
#   [ 6 18]
#   [10 22]]
#
#  [[ 3 15]
#   [ 7 19]
#   [11 23]]]
print(np.transpose(a, [2,0,1]))
# 这个和前面[2,1,0]的分析一样,只是少了转置的一步
# 可得:
# [[[ 0  4  8]
#   [12 16 20]]
#
#  [[ 1  5  9]
#   [13 17 21]]
#
#  [[ 2  6 10]
#   [14 18 22]]
#
#  [[ 3  7 11]
#   [15 19 23]]]

# 总结下:
# 1. 从维度0的位置开始看,取出对应原维度的值放到对应位置(想象理解)
# 2. 如果后面的维度比起原维度顺序有变化,则需要继续按1步骤处理(三维时候剩下维度变化可直接理解为转置)

print(np.transpose(a, [1, 0, 2]))
# 同理,0,2顺序没有变化,将维度1的各部分放到维度0的位置,直接可得结果
# 可以思考下
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值