我正在尝试使用 Numexpr 制作一个快速的Vector Norm函数来与Numpy's进行比较。我尝试以下方法:
import numexpr as ne
import numpy as np
def L2_Norm(vector_in):
vector1 = ne.evaluate("abs(vector_in)")
vector2 = ne.evaluate("vector1**2")
vector3 = ne.evaluate("sum(vector2)")
vector_out = ne.evaluate("sqrt(vector3)")
return vector_out`
ve = np.arange(10)
L2_Norm(ve)
我明白了:
File "C:\Folder1\Folder2\src\test.py", line 11, in L2_Norm
vector3 = ne.evaluate("sum(vector2)")<br>
File "C:\Python27\lib\site-packages\numexpr\necompiler.py", line 701, in evaluate
a = global_dict[name]<br>
KeyError: 'a'
我基本上遵循了他们用户指南中的相同步骤(这似乎是唯一的参考)。我唯一的线索是:
umexpr 的主要程序是这样的:
evaluate(ex, local_dict=None, global_dict=None, **kwargs)
其中 ex 是形成表达式的字符串,例如“2*a+3*b”。a 和 b 的值默认取自调用函数的框架(通过使用 sys._getframe())。或者,它们可以使用 local_dict 或 global_dict 参数指定,或作为关键字参数传递
......我不太明白 - 我认为作者保持简单,因为包很简单。我忽略了什么?