gpt4 book ai didi

python - 在 numexpr 中限制子表达式

转载 作者:太空狗 更新时间:2023-10-30 02:33:57 26 4
gpt4 key购买 nike

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

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

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

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

我想使用单个 numexpr 表达式(xy 很大,我不想多次迭代它们)。

最佳答案

也许这样的事情会奏效?

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 - 在 numexpr 中限制子表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com