好的,我知道如何转置矩阵,例如:
A = np.arange(25).reshape(5, 5)
print A
array([[ 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]])
A.T
array([[ 0, 5, 10, 15, 20],
[ 1, 6, 11, 16, 21],
[ 2, 7, 12, 17, 22],
[ 3, 8, 13, 18, 23],
[ 4, 9, 14, 19, 24]])
对于一维数组,不可能使用这个“.T”工具(老实说,我不知道为什么)所以要转置一个向量,你必须改变范式并使用,例如:
B = np.arange(5)
print B
array([0, 1, 2, 3, 4])
并且因为B.T
会给出相同的结果,所以我们应用这种范式变化,使用:
B[ :, np.newaxis]
array([[0],
[1],
[2],
[3],
[4]])
而且我发现这种范式变化有点反感,因为一维向量与二维向量(矩阵)绝不是不同的实体,从数学上讲它们来自同一个家庭并共享许多事物。
我的问题是:是否有可能用 numpy 皇冠上的宝石(有时称为)einsum 进行这种换位,以更紧凑和统一的方式用于每种张量?我知道你做的矩阵
np.einsum('ij->ji', A)
你会得到,就像以前一样A.T
:
array([[ 0, 5, 10, 15, 20],
[ 1, 6, 11, 16, 21],
[ 2, 7, 12, 17, 22],
[ 3, 8, 13, 18, 23],
[ 4, 9, 14, 19, 24]])
是否可以使用一维数组来做到这一点?
先感谢您。