In [1019]: A=np.random.rand(K,M,N)
In [1021]: B=np.random.rand(K,L,N)
In [1023]: C=np.einsum('kmn,kln->kml',A,B)
In [1024]: C.shape
Out[1024]: (2, 4, 3)
In [1026]: D=A@B.transpose(0,2,1)
In [1027]: D.shape
Out[1027]: (2, 4, 3)
In [1028]: np.allclose(C,D)
Out[1028]: True
对于这个小例子,timeit是相同的。在
[np.dot(x,y.T) for x, y in zip(A, B)]执行相同的操作;将y的最后第二个维度与{}的最后一个维度匹配,并迭代{}和{}的第一个维度。在
matmul
起作用,在B
中有一个转置,因此其倒数第二个dim与A
中的最后一个相匹配。在对于这个小例子,
timeit
是相同的。在[np.dot(x,y.T) for x, y in zip(A, B)]
执行相同的操作;将y
的最后第二个维度与{由于}具有形状{},并且您希望找到形状为
A
具有形状(K, M, N)
,而{(K, M, L)
的积和,可以使用np.einsum
:相关问题 更多 >
编程相关推荐