矢量化组件明智的乘法

时间:2018-02-20 22:40:34

标签: python numpy

将大小为d的2N向量存储在两个矩阵aba.shape = b.shape = (N,d)(所以a[i]a中的第i个向量,其中包含N向量,与b)相同。

我想以矢量化的方式构造形状T的张量(N,d,d),使T[i,p,q] = a[i,p]*b[i,q]

换句话说,我想要一个张量,其中第i个分量是(d乘d) - a[i]b[i]元素的分量乘法矩阵,而不用循环。

我尝试在多个轴上使用tensordot,或点无效。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

使用einsum计算自己编写:

np.einsum('ip,iq->ipq', a,b)

这个表达也清楚地表明没有总结 - 只是产品。这是一种外部产品,而不是内部产品或基质产品。在这种情况下,tensordot无济于事。但广播应该:

a[:,:,None] * b[:,None,:]

(有时我必须颠倒None的顺序。使用不同的pq来检查它是有帮助的。)

你没有提供MCVE来检查我的答案。