我有两个数组A=[1,2,3]
和B=[[1],[0],[1],[0]]
。如何在python中执行张量点积的问题。我期待得到:
C=[[1,2,3],
[0,0,0],
[1,2,3],
[0,0,0]]
函数np.tensordot()返回有关数组形状的错误。
这个问题的一点补充。如果矩阵的形状完全不同,如何进行此类操作,如:
A=[[1,1,1,1],
[1,1,1,1],
[2,2,2,2],
[3,3,3,3]]
B=[2,1]
C=[[[2,1],[2,1],[2,1],[2,1]],
[[2,1],[2,1],[2,1],[2,1]],
[[4,2],[4,2],[4,2],[4,2]],
[[6,3],[6,3],[6,3],[6,3]]]
答案 0 :(得分:6)
尝试使用正确的numpy
数组:
>>> array([[1],[2],[3]]).dot(array([[1,0,1,0]]))
array([[1, 0, 1, 0],
[2, 0, 2, 0],
[3, 0, 3, 0]])
如果对齐方式不同,使用a.transpose()
可以将其翻转:
>>> array([[1],[2],[3]]).dot(array([[1,0,1,0]])).transpose()
array([[1, 2, 3],
[0, 0, 0],
[1, 2, 3],
[0, 0, 0]])
如果您(无论出于何种原因)必须使用tensordot()
,请尝试以下操作:
>>> numpy.tensordot([1,2,3], [1,0,1,0], axes=0)
array([[1, 0, 1, 0],
[2, 0, 2, 0],
[3, 0, 3, 0]])
答案 1 :(得分:3)
我对这个论点并不是那么专家,但是如果你尝试在numpy中改变轴,它会起作用:
A=[1,2,3]
B=[[1],[0],[1],[0]]
np.tensordot(B, A, axes=0)
array([[[1, 2, 3]],
[[0, 0, 0]],
[[1, 2, 3]],
[[0, 0, 0]]])