numpy.einsum使用转置时间矩阵:x ^ T * x
作者:互联网
对于2D矩阵X(形状(m,n)),我尝试计算X.T * X,其中*是矩阵乘法. Following the explanation on this post我希望能够使用np.einsum(‘ji,ik-> jk’,X,X)做到这一点,其中在LHS上,ji首先写第一个X参数的转置,然后将其乘以第二个X参数.
这不适用于错误(对于(m,n)=(3,4)):
ValueError: operands could not be broadcast together with remapped shapes [original->remapped]: (4,3)->(4,newaxis,3) (4,3)->(3,4)
但是,这有效:np.einsum(‘ij,jk-> ik’,X.T,X).我在这里想念什么?为什么还要在中间添加轴?
解决方法:
使用XT * X(*是矩阵乘法),您将第一个X的转置第二轴与第二个X的第一轴相减.现在,第一个X的转置第二轴与第一个X的第一轴相同因此,我们只是简单地将这两个X的第一个轴相减,而其余两个轴则保持不变.
要在einsum上复制该字符,请使字符串符号中的第一个字符保持相同,而两个输入的第二个轴的字符保持不同,如下所示-
np.einsum('ji,jk->ik', X, X)
因此,j的总和减少,而其余的轴-i和k保留在输出中.
同样,这将比本机矩阵乘法慢:X.T.dot(X).但是,我想这篇文章的意思更多是作为对einsum的学习.
标签:matrix,linear-algebra,python,numpy 来源: https://codeday.me/bug/20191025/1930429.html