首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在numexpr中封闭子表达式

在numexpr中封闭子表达式
EN

Stack Overflow用户
提问于 2012-06-06 03:35:46
回答 1查看 467关注 0票数 4

如何使用numexpr有效地表达以下内容

代码语言:javascript
复制
z = min(x-y, 1.0) / (x+y)

这里,xy是一些形状相同的大型NumPy数组。

换句话说,在除以x+y之前,我试图将x-y限制为1.0

我想使用一个numexpr表达式(xy都很大,我不想对它们进行多次迭代)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-06 04:18:01

也许像这样的东西能行得通?

代码语言:javascript
复制
In [11]: import numpy as np
In [12]: import numexpr as ne    
In [13]:     
In [13]: x = np.linspace(0.02, 5.0, 1e7)
In [14]: y = np.sin(x)
In [15]:     
In [15]: timeit z0 = ((x-y) - ((x-y) > 1) * (x-y - 1))/(x+y)
1 loops, best of 3: 1.02 s per loop
In [16]: timeit z1 = ne.evaluate("((x-y) - ((x-y) > 1.) * ((x-y) - 1.))/(x+y)")
10 loops, best of 3: 120 ms per loop    
In [17]: timeit z2 = ne.evaluate("((x-y)/(x+y))")
10 loops, best of 3: 103 ms per loop

分区上方的封顶是有惩罚的,但这并不是太糟糕。不幸的是,当我在一些较大的数组上尝试它时,它出现了分段错误。:-/

更新:这个更漂亮,速度也更快:

代码语言:javascript
复制
In [40]: timeit w0 = ne.evaluate("where(x-y>1,1,x-y)/(x+y)")
10 loops, best of 3: 114 ms per loop
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10903748

复制
相关文章

相似问题

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