Numexpr错误:“a = global_dict [name]”

时间:2012-12-07 02:39:48

标签: python numexpr

我正在尝试使用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'

我基本上按照User Guide上的相同步骤(这似乎是唯一的参考)。我唯一的线索就是:

   umexpr的主要惯例是这样的:
  evaluate(ex, local_dict=None, global_dict=None, **kwargs)

     

其中ex是形成表达式的字符串,如“2 * a + 3 * b”。价值   对于a和b,默认情况下将从调用函数的帧中获取   (通过使用sys._getframe())。或者,他们可以   使用local_dict或global_dict参数指定,或传递为   关键字参数

...我真的不明白 - 我认为作者保持简单,因为包很简单。我忽略了什么?

1 个答案:

答案 0 :(得分:1)

原来“local_dict = None,global_dict = None”参数不是默认的。您需要专门将它们添加到numexpr.evaluate函数中。