如何使用transpose转置ndarray矩阵?与T属性有何不同?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
继续ndarray
矩阵翻转的问题,在前面的文章中,是使用.T
属性来解决这个问题的,简单好用省力。本文介绍另外一种方法,是基于numpy
的transpose()
方法。它的作用和.T
是一致的,绝大多数情况下,都是可以互换的。那么,numpy.transpose()
又有什么特别的用法么?这就是本文要讨论的问题。
大家好,这里是苏南大叔的“程序如此灵动”博客,本文讨论numpy.transpose()
方法。测试环境:win10
,python@3.11.0
,numpy@1.24.2
,pandas@1.5.3
。
transpose
,英文释义:转置;使换位;使转移;使(乐曲)变调,移调;使变形;使掉换顺序。
numpy.transpose()
与.T
大概率相同
大概率情况下,numpy.transpose()
与.T
是一致的效果。下面的代码,演示了一维二维三维的情况下,两者的结果对比。ndarray
是否相等的文章总结,请参考:
转置一维数组【一维的.T
和原值一样,没有必要执行.T
】:
import numpy as np
sn = np.array(["苏", "南", "大", "叔"])
print(np.transpose(sn))
print(np.array_equal(sn.T, np.transpose(sn)))
转置二维数组:
import numpy as np
sn = np.array([["苏", "南"], ["大", "叔"]])
print(np.transpose(sn))
print(np.array_equal(sn.T, np.transpose(sn)))
转置三维矩阵:
import numpy as np
sn = np.array(
[
[["苏1", "南1"], ["大1", "叔1"]],
[["苏2", "南2"], ["大2", "叔2"]],
[["苏3", "南3"], ["大3", "叔3"]],
]
)
print(np.transpose(sn))
print(np.array_equal(sn.T, np.transpose(sn)))
axes
轴的概念
在前面的文章里面,苏南大叔画了一张图,显示的是三维矩阵下的"0轴"/"1轴"/"2轴"的简单推理。
这个理论依据就是从下面的公式里面推导出来的。
import numpy as np
sn = np.arange(27).reshape(3, 3, 3) # 3*3*3的三维数组
sn_ = np.transpose(sn, axes=(0, 1, 2)) # 正常原版
print(sn, sn_, np.array_equal(sn, sn_))
import numpy as np
sn = np.arange(27).reshape(3, 3, 3) # 3*3*3的三维数组
ns = np.transpose(sn)
ns_ = np.transpose(sn, axes=(2, 1, 0)) # 正常转置
print(ns, ns_, np.array_equal(ns, ns_))
从上面的代码中,苏南大叔可以推断出:
- 对于三维的
ndarray
矩阵,axes
轴的排序是0\1\2
。 - 对于转置的
ndarray
矩阵,axes
轴的排序是2\1\0
。也就是说:转置是"0轴"和"2轴"互换。
numpy.transpose()
与.T
不同之处
numpy.transpose()
与.T
的微小不同之处,就体现在下面这个函数里面了。如果你已经理解了三维矩阵中轴的概念,那么,下面的这个操作,也应该比较好理解。
.T
交换的是0轴
和2轴
。numpy.transpose()
还可以交换0轴
和1轴
。
import numpy as np
sn = np.arange(27).reshape(3, 3, 3) # 3*3*3的三维数组
ns3 = np.transpose(sn, axes=(1, 0, 2)) # 烧脑操作
print(ns3)
print(ns, ns_, np.array_equal(ns.T, ns_))
当然根据排列组合算法,3个人坐3个座位,组合数是3*2=6,所以,还有三种不同的组合,大家可以自行实验后续的组合。
结束语
本文结论就是:不到情非得已,请使用.T
属性来获得转置矩阵。如果需要特殊定制的轴对换情形,可以考虑numpy.transpose()
外加axes=()
定义轴顺序的情况。
更多python
相关经验文章,请参考:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。