我在代码中的含义是:
C = np.tensordot(B, A, axes = (0,0))
A是(20L, 50L)
,B是(20L, 20L)
我应该改变,因为有人告诉我np.einsum
会更快,但我想我不完全理解tensordot
输出的内容。
现在C是(20L, 50L)
,我不明白为什么?
当然我已经阅读了文档页面,但仍然没有掌握这些信息。考虑到我刚刚开始使用Python。
答案 0 :(得分:0)
A形状(20,50),B形状(20,20):
C = np.tensordot(B, A, axes = (0,0))
相当于:
C = np.zeros((20,50))
for i in range(20):
for j in range(50):
for k in range(20):
C[i,j] += A[k,j] * B[k,i]
相当于:
C = np.einsum('kj,ki->ij',A,B)
确实,einsum似乎比tensordot快一点:
%timeit np.einsum('kj,ki->ij',A,B)
10000 loops, best of 3: 20.1 µs per loop
%timeit np.tensordot(B,A,axes=(0,0))
10000 loops, best of 3: 33.6 µs per loop