转置就是矩阵行列对换,相当于另一种显示形式,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]]])
这就比较难看了,这如果需要得到转置,要进行行列对换,起码应该知道对角线,或者说对换的对称轴;这里的对象方法不计其数,不愧是搞科学计算的,要完全弄透彻,要熟练矩阵运算,矩阵处理,说不定还要复数的一些啥逻辑