首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从np.tensordot转到np.einsum

如何从np.tensordot转到np.einsum
EN

Stack Overflow用户
提问于 2017-03-23 22:20:10
回答 1查看 243关注 0票数 0

我得到的代码是这样的:

代码语言:javascript
复制
C = np.tensordot(B, A, axes = (0,0))

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

自从有人告诉我使用np.einsum会更快之后,我应该改变一下,但我想我不完全理解tensordot输出的是什么。

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

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

EN

回答 1

Stack Overflow用户

发布于 2017-03-24 00:31:32

其中A具有形状(20,50)和B具有形状(20,20):

代码语言:javascript
复制
C = np.tensordot(B, A, axes = (0,0))

等同于:

代码语言:javascript
复制
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]

相当于:

代码语言:javascript
复制
C = np.einsum('kj,ki->ij',A,B)

einsum看起来确实比tensordot快一点:

代码语言:javascript
复制
%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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42978762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档