0

我得到的代码中的内容类似于:

C = np.tensordot(B, A, axes = (0,0))

A 是 a(20L, 50L)和 B 是(20L, 20L)

我应该改变,因为有人告诉我它会更快np.einsum,但我想我不完全理解tensordot输出的是什么。

现在 C 是 a(20L, 50L)我不明白为什么?

当然我已经阅读了文档页面,但仍然没有掌握信息。考虑到我刚刚开始使用 Python。

4

1 回答 1

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
于 2017-03-23T16:31:32.273 回答