Использование Numexpr в методе объекта - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь оптимизировать некоторый объектно-ориентированный код numpy, используя Numberxpr, но я не уверен, возможно ли это сделать. Я не могу найти что-либо в документации об этом в любом случае. Я хотел бы, чтобы следующий пример работал:

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))

Я просмотрел некоторые другие ответы о Numberxpr, которые предложили аргумент local_dict в качестве способа передачи набора переменных объекта в Numberxpr evaluate, но в данном случае она не работает. Я получаю следующую ошибку:

AttributeError: 'VariableNode' object has no attribute 'a'

Я предполагаю, что смогу заставить это работать, если я все передам внешней функции, но накладные расходы на передачу всего туда и обратно, кажется, что это разрушит цель такого оптимизация в первую очередь. Это возможно?

...