我有两个矩阵,5x4 和 3x2。我想从他们那里得到一个 5x3 矩阵。
>>>theta_ic = np.random.randint(5,size=(5,4))
>>>psi_tr = np.random.randint(5,size=(3,2))
我可以这样做
>>>np.einsum('ij,kl->ik',theta_ic,psi_tr).shape
(5,3)
但我不知道如何通过 numpy.tensordot 做到这一点我试过这个
>>>np.tensordot(theta_ic,psi_tr,((1),(1)))
我收到一个错误
ValueError: shape-mismatch for sum
背后的数学是
z_ij = \sum_{c=1}^4{x_{ic}}\sum_{d=1}^{2}{y_{jd}}
where i=[1,...,5], j=[1...3]
为什么我需要迁移einsum
到tensordot
?
因为我正在使用作为后端加速计算的pymc3
包进行研究。theano
但是,theano.tensor
不支持einsum
,它只支持tensordot
,与 . 相同的语法np.tensordot
。