我正在尝试使用 numexpr 优化一些面向对象的 numpy 代码,但我不确定是否可以这样做。无论哪种方式,我都无法在文档中找到任何内容。我想让下面的例子工作:
import numpy as np
from numexpr import evaluate as neval
class nexp_eval_test:
def __init__(self,size):
self.a = np.random.randint(1,100,size)
self.b = np.random.randint(1,100,size)
self.c = np.random.randint(1,100,size)
self.d = np.random.randint(1,100,size)
self.e = np.random.randint(1,4,size)
self.f = np.random.randint(1,100,size)
self.out = np.zeros(self.a.shape)
def calculate(self):
self.out = self.a+self.b*(self.c+self.d)/self.f
def calculate_ne(self):
self.out = neval('self.a+self.b*(self.c+self.d)/self.f', local_dict=vars(self))
我查看了有关 numexpr 的其他一些答案,这些答案建议将local_dict
参数作为将对象的变量集传递给 numexprevaluate
函数的一种方式,但在这种情况下它似乎不起作用。我收到以下错误:
AttributeError: 'VariableNode' object has no attribute 'a'
我假设如果我将所有内容都传递给外部函数,我可以让它工作,但是来回传递所有内容的开销似乎首先会破坏这种优化的目的。这可能吗?