Я делаю следующий расчет:
y = np.mat(np.log(datay))
x = np.mat([datax**2, datax, np.ones(len(datax))]).T
popt = (x.T * x).I * x.T * y.T
datax и datay - это нормальные 1-мерные массивы, например:
datay = np.array([1,4,9,16])
datax = np.array([1,2,3,4])
Расчет работает хорошо. Но я хотел ускорить это, поэтому я попытался поместить это в numba: (Я действительно плохо знаком с numba ... но хочу попробовать)
@jit(nopython=True)
def calc(datax, datay):
y = np.mat(np.log(datay))
x = np.mat([datax**2, datax, np.ones(len(datax))]).T
return (x.T * x).I * x.T * y.T
но это не работает. Я получаю следующую ошибку
Сбой на nopython (внешний интерфейс nopython)
Неизвестный атрибут 'matrix' типа Module numpy
Так, как я могу заставить это работать?
Второе:
как вы могли заметить, я вычисляю параметры полинома второго порядка. Мне нужно сделать это как можно быстрее, потому что мне нужно делать это часто. Так что сейчас я просто перебираю все
result = np.zeros(len(datay), 3)
datax = np.array([1,2,3,4)]
x = np.matrix([datax**2, datax, np.ones(len(datax))]).T
for i, data in enumerate(datay):
data = np.array(data-baseline)
if (any(i <= 0 for i in data)): continue
try:
y = np.matrix(np.log(data))
result[i] = ((x.T * x).I * x.T * y.T).A1
Как мне это ускорить: просто поместите все в одну функцию numba и надейтесь, что компиляция подойдет? Или есть другие разумные способы?
У Numba есть инструменты для распараллеливания, верно? Могут ли они применяться в моем случае?
Спасибо за ваше время :) 1026 *