2

Numexprを使用して、 Numpyと比較するための高速なVectorNorm関数作成しようとしています。私は次のことを試みます:

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引数を使用して指定するか、キーワード引数として渡すことができます

...私は本当に理解していません-パッケージが単純なので、作者はそれを単純に保ったと思います。私は何を見落としましたか?

4

1 に答える 1

1

結局、「local_dict = None、global_dict = None」パラメーターはデフォルトではないことがわかりました。それらを関数に具体的に追加する必要がありますnumexpr.evaluate

于 2012-12-14T22:47:34.793 に答える