0

我刚刚开始使用 numexpr 的评估函数,但遇到了一个恼人的错误。

我希望它本身打印 sin(10),并且它做得非常好,但是如果我执行 sec(10),我会得到“TypeError: 'VariableNode' object is not callable”

示例代码:

import mpmath as mp
from numexpr import evaluate as ne

cos = mp.cos
sin = mp.sin
csc = mp.csc
sec = mp.sec

print(ne('cos(50)'))
>>> 0.9649660284921133

print(ne('sin(50)')
>>> -0.26237485370392877

print(ne('csc(50)')
>>> TypeError: 'VariableNode' object is not callable

print(ne('sec(50)')
>>> TypeError: 'VariableNode' object is not callable

当我使用 eval 时,它会返回正确的值,就像它应该的那样。

为什么会出现这种情况?是因为 numexpr 是 numpy 的扩展并自动从 numpy 获取其函数(numpy 没有 sec、csc、cot),因此不能从 mpmath 获取函数?

提前谢谢了!:)

4

1 回答 1

0

查看文档,有一段关于受支持的功能csc,似乎sec不受支持。

但是,除法运算符 andsincos受支持的,所以用 and 代替csc(50)and1 / sin(50)sec(50)可以了1 / cos(50)

实现这些辅助且有些罕见的功能没有什么意义,因为它们可以很容易地被支持的运算符和功能替换。

通常,numexpr用于在处理大型阵列时提高性能。

于 2021-12-14T23:22:00.860 回答