Python NumPy векторизовать массив экземпляров объекта - PullRequest
0 голосов
/ 13 ноября 2018

Я бы хотел инкапсулировать мою функцию calc и все ее параметры внутри объекта, но векторизовать выполнение для миллионов объектов так же, как это делал бы numpy. Есть предложения?

расчет по-прежнему является базовой арифметикой, которую numpy должен уметь векторизовать.

Пример кода:

import numpy as np
myarray = np.random.rand(3, 10000000)

############################# This works fine: FAST ###################################

def calc(a,b,c):
    return (a+b/c)**b/a


res1 = calc(*myarray)  #0.7 seconds

############################# What I'd like to do (unsuccessfully): SLOW ###################################

class MyClass():
    __slots__ = ['a','b','c']

    def __init__(self, a,b,c):
        self.a, self.b, self.c = a,b,c

    def calc(self):
        return (self.a + self.b / self.c) ** self.b / self.a 

def classCalc(myClass:MyClass):
    return myClass.calc()

vectorizedClassCalc = np.vectorize(classCalc)
myobjects = np.array([MyClass(*args) for args in myarray.transpose()])


res2 = vectorizedClassCalc(myobjects) #8 seconds no different from a list comprehension
res3 = [obj.calc() for obj in myobjects] #7.5 seconds 

возможно, у панд есть дополнительные функции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...