转置就是矩阵行列对换,相当于另一种显示形式,ndarray数组还有这种转置特性,而且和数学里做转置的符号T一样,也有一个T属性
>>> import numpy as np
>>> data = np.arange(15).reshape((3, 5))
>>> data
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> data.T
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
这里data是3 * 5,它的转置是5 * 3,因此假如要计算内积X^TX,跟向量类似,得到的结果应该是一个5 * 5维的方阵;但是不能直接进行相乘(我太天真了!),而是要用到np.dot方法来计算
>>> data.T * data
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (5,3) (3,5)
>>> np.dot(data.T, data)
array([[125, 140, 155, 170, 185],
[140, 158, 176, 194, 212],
[155, 176, 197, 218, 239],
[170, 194, 218, 242, 266],
[185, 212, 239, 266, 293]])
维数都不一样,直接运算肯定是错误的~!下面的5 * 5结果,的确就跟矩阵乘法的结果一模一样
简单的转置只需要.T,就可以行列互换得到转置;假如是一个比较复杂的更多维的数组,比如2 * 2 * 4
>>> import numpy as np
>>> data = np.arange(16).reshape((2, 2, 4))
>>> data
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
这就比较难看了,这如果需要得到转置,要进行行列对换,起码应该知道对角线,或者说对换的对称轴;这里的对象方法不计其数,不愧是搞科学计算的,要完全弄透彻,要熟练矩阵运算,矩阵处理,说不定还要复数的一些啥逻辑
