欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

数组的转置和轴对称

发布时间:2023/12/13 编程问答 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 数组的转置和轴对称 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • T属性
  • transpose()方法
  • swapaxes()方法


T属性

import numpy as np # Numpy工具包data = np.arange(12).reshape(3, 4) # 创建一个3行4列的数组 print(data)# 数组的转置和轴对称 data1 = data.T print(data1)

print(data)

[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]

print(data1)

[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]


transpose()方法

二维数组运用 T属性转置较为简单(x->y,y->x),但当操作对象是高维度的数组时,运用transpose()方法可以自由的进行转置(x->y,y->z,z->x || x->z,y->x,z->y),运用transpose时需要得到一个由轴编号组成的元组,才能对这些轴进行转置。

# transpose()方法 arr = np.arange(16).reshape((2, 2, 4)) # 每组2个元素组,总共两组,每个元素组里有4个元素 print(arr) print(arr.shape) arr1 = arr.transpose(1, 2, 0) # 变成(2, 4, 2)三维数组,每组4个元素组,总共2组,每个元素组里有2个元素 print(arr1)

注释名称只是为了方便自己理解瞎写的,三维数组还是按x,y,z理解更好理解

三维数组有三个轴,每个轴都对应着一个编号,分别为0、1、2。
由输出可知,arr.shape是(2,2,4),如果希望对arr进行转置操作,就需要对它的shape中的顺序进行调换。也就是说,当使用transpose()方法对数组的shape进行变换时,需要以元组的形式传入shape的编号,比如本例中的(1,2,0)。

ps:若传入(0,1,2),则数组的shape不会发生任何变化

print(arr)

[[[ 0 1 2 3]
[ 4 5 6 7]]

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

为了便于理解贴张图好了

print(arr.shape)

(2,2,4)

print(arr1)

[[[ 0 8]
[ 1 9]
[ 2 10]
[ 3 11]]

[[ 4 12]
[ 5 13]
[ 6 14]
[ 7 15]]]

本例中,由(0,1,2)变为(1,2,0)其实也就是我们说的(x->y,y->z,z->x),什么意思呢?
简单来讲,如果拿第一个元素0来看,不方便解释——以前x0,y0,z0的值等于0,现在x0,y0,z0的值等于0那我们看第二个元素的话,shape为(0,1,2)时,x0,y0,z1的值为1,当shape为(1,2,0)时,x0,y0,z1的值由于(x->y,y->z,z->x)【->前是(0,1,2)中的坐标,->后是(1,2,0)中的坐标】这样的变换,也就是(1,2,0)的x0是(0,1,2)的y0,(1,2,0)的y0是(0,1,2)的z0,(1,2,0)的z1是(0,1,2)的x1,即——8。以此类推。

如果我们不输入任何参数,直接调用transpose()方法,则其执行的效果等价于transpose(2,1,0)将数组进行转置。


swapaxes()方法

在某些情况下,我们可能只需要转换其中的两个轴,这时我们可以使用此方法,该方法需要接收一对轴编号。

# swapaxes()方法 arr2 = arr.swapaxes(1, 0) # 等价于transpose(1, 0, 2) print(arr2)

print(arr2)

[[[ 0 1 2 3]
[ 8 9 10 11]]

[[ 4 5 6 7]
[12 13 14 15]]]

总结

以上是生活随笔为你收集整理的数组的转置和轴对称的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。