矩阵转置

转置就是矩阵行列对换,相当于另一种显示形式,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]]])

这就比较难看了,这如果需要得到转置,要进行行列对换,起码应该知道对角线,或者说对换的对称轴;这里的对象方法不计其数,不愧是搞科学计算的,要完全弄透彻,要熟练矩阵运算,矩阵处理,说不定还要复数的一些啥逻辑

发表回复