Я пытаюсь оптимизировать некоторый объектно-ориентированный код 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'
Я предполагаю, что смогу заставить это работать, если я все передам внешней функции, но накладные расходы на передачу всего туда и обратно, кажется, что это разрушит цель такого оптимизация в первую очередь. Это возможно?