После просмотра выступление SciPy о Numba, насколько я понимаю, если это делается с помощью инструментов NumPy, это можно сделать с помощью Numba (с хорошим шансом ускорить его).
Однако, когда я экспериментировал с Numba-fing некоторым кодом, похоже, что простой JIT (1) не имеет проблем с пониманием списка, но (2) не может понять numpy.asarray()
.
Когда я бегу
import numba
@numba.jit
def squareTest(xlist):
y = [x**2 for x in xlist]
return y
работает нормально. Но когда я бегу
import numba
import numpy as np
@numba.jit
def squareTest(xlist):
y = [x**2 for x in xlist]
y1 = np.asarray(y)
return y1
консоль IPython дает мне длинную трассировку, говорит, что произошла ошибка понижения, и заканчивается
def squareTest(xlist):
y = [x**2 for x in xlist]`
^
Я не знаю структуру модуля Numba, но самая последняя часть говорит мне, что когда он собирается впоследствии превратить созданный список в массив NumPy, у него возникают проблемы с пониманием списка.
Я проверил
@numba.jit
def squareTest(xlist):
y = list(range(20))
y1 = np.asarray(y)
return y1
и он работал без проблем, поэтому похоже, что он может обрабатывать либо понимание списка, или np.asarray()
, но не оба.
Мое первое предположение заключалось в том, что режим njit
может обрабатывать все NumPy, а режим, который отключается путем добавления n
к jit
, обрабатывает понимание списка. Но нет, первый пример кода все еще работает, когда он изменен на njit
.
В чем здесь проблема и как я могу использовать функции Numba-fy, которые включают выполнение операций с массивами NumPy для массивов, которые наиболее питонически созданы с помощью списков?
@jit
. Так что дело не столько в оптимизации кода, сколько в том, чтобы заставить его работать. - person Post169   schedule 28.06.2018