将大小为d的2N向量存储在两个矩阵a
和b
中a.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,或点无效。有什么想法吗?
答案 0 :(得分:2)
使用einsum
计算自己编写:
np.einsum('ip,iq->ipq', a,b)
这个表达也清楚地表明没有总结 - 只是产品。这是一种外部产品,而不是内部产品或基质产品。在这种情况下,tensordot
无济于事。但广播应该:
a[:,:,None] * b[:,None,:]
(有时我必须颠倒None
的顺序。使用不同的p
和q
来检查它是有帮助的。)
你没有提供MCVE来检查我的答案。