1

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

我假设如果我将所有内容都传递给外部函数,我可以让它工作,但是来回传递所有内容的开销似乎首先会破坏这种优化的目的。这可能吗?

4

0 回答 0