编程语言
首页 > 编程语言> > python – 在numexpr中限制子表达式

python – 在numexpr中限制子表达式

作者:互联网

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

z = min(x-y, 1.0) / (x+y)

这里,x和y是一些相同形状的大型NumPy数组.

换句话说,我试图将x-y限制为1.0,然后再除以x y.

我想使用单个numexpr表达式来做到这一点(x和y很大,我不想不止一次迭代它们).

解决方法:

也许这样的事情可行吗?

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

对分区以上的上限进行处罚,但这并不算太糟糕.不幸的是,当我为一些较大的阵列尝试它时,它会分裂. : – /

更新:这更漂亮,也更快一点:

In [40]: timeit w0 = ne.evaluate("where(x-y>1,1,x-y)/(x+y)")
10 loops, best of 3: 114 ms per loop

标签:python,numpy,pytables,numexpr
来源: https://codeday.me/bug/20190530/1182989.html