我有两个1维数组,a
,np.shape(a) == (n,)
和b
,np.shape(b) == (m,)
。
我希望通过执行c
来制作(第3项)张量np.shape(c) == (n,n,m,)
以c = np.outer(np.outer(a,a),b)
。
但是当我这样做时,我得到了:
>> np.shape(c)
(n*n,m)
这只是一个矩形矩阵。如何制作出我想要的3D张量?
答案 0 :(得分:2)
您可以使用np.multiply.outer
代替np.outer
来获取所需的外部产品:
>>> a = np.arange(4)
>>> b = np.ones(5)
>>> mo = np.multiply.outer
然后我们有:
>>> mo(mo(a, a), b).shape
(4, 4, 5)
更好的方法是使用np.einsum
(这可以避免创建中间数组):
>>> c = np.einsum('i,j,k->ijk', a, a, b)
>>> c.shape
(4, 4, 5)