Numpy实现矩阵转置的几种方法

在矩阵操作中,经常需要对矩阵进行转置,或者需要交换矩阵的轴,下面介绍一下使用Numpy完成矩阵轴数据交换的几种方法。主要包括以下几种方法:

1、.T转置,适用于1-D,2-D矩阵

2、np.transpose,适用于一次同时交换多个(大于两个)轴数据

3、np.swapaxes,一次只能交换两个轴的数据


下面通过一个具体例子感受以下具体的转换过程和转换结果。

import numpy as np


def location(a, v):
    """
    在矩阵a中查找元素v的索引编号
    :param a:
    :param v:
    :return:
    """
    return [e.tolist()[0] for e in np.where(a == v)]


print("#" * 40, "transpose和swapaxes对比(3维矩阵)", "#" * 40)
x = np.arange(16).reshape(2, 2, 4)
print(x)
print("6在原始矩阵中的索引:", location(x, 6))
# 将矩阵按照新的轴编号进行中心整合
transpose_x = np.transpose(x, axes=[1, 0, 2])
print("6在交换原始矩阵x的0,1轴之后的索引:", location(transpose_x, 6))
# 交换axis1和axis2的轴数据
swapaxes_x = np.swapaxes(x, axis1=0, axis2=1)
print("6在交换原始矩阵x的0,1轴之后的索引:", location(swapaxes_x, 6))
# .T操作相当于np.transpose(x, [2, 1, 0])
T_x = x.T
print("6在T转置之后的索引:", location(T_x, 6))

print("#" * 40, "transpose和swapaxes对比(5维矩阵)", "#" * 40)
x = np.arange(720).reshape(2, 3, 4, 5, 6)
# print(x)
print("100在原始矩阵中的索引:", location(x, 100))
# 变换轴位置
transpose_x = np.transpose(x, axes=[0, 2, 3, 1, 4])
print("100在交换原始矩阵x的[0, 2, 3, 1, 4]轴之后的索引:", location(transpose_x, 100))
# 先交换1 3轴,交换后变成[0, 3, 2, 1, 4]
swapaxes_x_1_3 = np.swapaxes(x, axis1=1, axis2=3)
# 再交换1 2轴,交换后变成[0, 2, 3, 1, 4]
swapaxes_x_2_3 = np.swapaxes(swapaxes_x_1_3, axis1=1, axis2=2)
print("100在交换原始矩阵x的[0, 2, 3, 1, 4]轴之后的索引:", location(swapaxes_x_2_3, 100))
# .T操作相当于np.transpose(x, [4, 3, 2, 1, 0])
T_x = x.T
print("100在T转置之后的索引:", location(T_x, 100))

输出结果如下:

######################################## transpose和swapaxes对比(3维矩阵) ########################################
[[[ 0  1  2  3]
  [ 4  5  6  7]]

 [[ 8  9 10 11]
  [12 13 14 15]]]
6在原始矩阵中的索引: [0, 1, 2]
6在交换原始矩阵x的0,1轴之后的索引: [1, 0, 2]
6在交换原始矩阵x的0,1轴之后的索引: [1, 0, 2]
6在T转置之后的索引: [2, 1, 0]
######################################## transpose和swapaxes对比(5维矩阵) ########################################
100在原始矩阵中的索引: [0, 0, 3, 1, 4]
100在交换原始矩阵x的[0, 2, 3, 1, 4]轴之后的索引: [0, 3, 1, 0, 4]
100在交换原始矩阵x的[0, 2, 3, 1, 4]轴之后的索引: [0, 3, 1, 0, 4]
100在T转置之后的索引: [4, 1, 3, 0, 0]

总结一下:

1、.T矩阵转置就相当于将矩阵的轴从0-n变成了n-0

2、transpose方法就是按照传入的轴编号顺序进行轴数据交换

3、swapaxes方法就是将传入的两个轴数据进行交换

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值