如何理解矩阵ndarray的T属性?如何转置ndarray三维矩阵?
发布于 作者:苏南大叔 来源:程序如此灵动~本文话题继续ndarray
的话题,文章的主要目的就是翻转ndarray
二维数组,行变成列,列变成行。方法也非常的简单,就是取一下ndarray
的T
属性,就获得了翻转过的ndarray
数组了。不光二维数组有效,其它维度的数组也是有效的。
大家好,这里是苏南大叔的程序如此灵动博客,记录苏南大叔的代码编程经验文章。本文测试环境:win10
,python@3.11.0
。本文描述python
的numpy
库中的ndarray
类型的转置事宜。(官方称之为转置,苏南大叔描述为翻转)。
不同维度不同结果
实际上本文的第一段话,就已经描述完全文了,是有史以来最快解决问题的一次。不过为了文章内容,这里苏南大叔还是要继续展开描述。首先要明确ndarray
的维度问题,相同的数据但是具有不同的维度后,这个转置翻转的结果是完全不一样的。参考文章:
标的数据:
import numpy as np
a1 = np.array( [1, 2, 3] )
a2 = np.array( [[1, 2, 3]] )
a3 = np.array( [[[ 1, 2, 3 ]]] )
print( a1.ndim ) # 1
print( a1.T )
1
[1 2 3]
print( a2.ndim ) # 2
print( a2.T )
2
[[1]
[2]
[3]]
print( a3.ndim ) # 3
print( a3.T )
3
[[[1]]
[[2]]
[[3]]]
一维ndarray
数组翻转
关于翻转转置这事来说,【一维ndarray
数组是没有啥意义的,翻转前后是一模一样的】。所以取.T
没有啥用。测试代码:
import numpy as np
a1 = np.array( [1, 2, 3] )
print( a1 )
print( a1.T )
输出:
[1 2 3]
[1 2 3]
这里的.ndim
属性为1。
二维ndarray
数组翻转【常见】
类似最常见的csv
格式,就是二维ndarray
数组。横纵互换就是转置互换了,非常好理解。测试代码:
import numpy as np
a2 = np.array( [[1, 2, 3],[4, 5, 6]] )
print( a2 )
print( a2.T )
输出:
[[1 2 3]
[4 5 6]]
[[1 4]
[2 5]
[3 6]]
三维ndarray
数组翻转【本文重点】
虽然不常见,但是苏南大叔还是耗费了无数脑细胞来研究这个三维数组的翻转问题,非常烧脑。测试代码:
import numpy as np
a3 = np.arange(27).reshape(3,3,3)
print( a3 )
print( a3.T )
输出:
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]]
[[ 9 10 11]
[12 13 14]
[15 16 17]]
[[18 19 20]
[21 22 23]
[24 25 26]]]
这里就直接输出图像描述一下结论了,在后续还有文章对三维数组的翻转进行描述。
三维数组的翻转,默认是0轴和2轴的数据对换。苏南大叔理解的对换步骤是这样的:
step1: 第一层保持1轴不变,2轴位置换成0轴,也就是说:以顺着1轴箭头的方向看的话,2轴逆时针旋转到0轴的位置。也就是说第一层的所有数字由水平变成竖直。(原有层保持不变,数字与层脱钩)
step2:第二层重复第一层的动作,顺着1轴箭头看的话,第二层在第一层的左侧。同时,两层被竖起来的层底部被对齐。
step3:第三层重复第二层的动作。
step4:废弃被旋转的0轴,1轴,2轴概念,使用原来的坐标体系及层体系。读取数字,得到矩阵。
总结:旋转的是数字!数字之间保持相对关系不变!轴坐标系和层级体系不变!
翻转结果是:
[[[ 0 9 18]
[ 3 12 21]
[ 6 15 24]]
[[ 1 10 19]
[ 4 13 22]
[ 7 16 25]]
[[ 2 11 20]
[ 5 14 23]
[ 8 17 26]]]
特别提示
对于同一层上的数据,
- 如果理解为二维数组,那么就是0轴行,1轴列。
- 如果理解为三维矩阵,那么就是1轴行,2轴列。0轴给了新多出来的竖直轴。
结束语
可以点击下面的链接查看苏南大叔的更多python
文章:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。