Я обнаружил, что когда индекс массива numpy
выходит за границы внутри цикла while в декорированной функции njit
, то, как функция обрабатывает цикл while, может быть довольно странным, и я не уверенпочему это происходит.
from numba import njit
import numpy as np
def func1(v):
i= 0
K= v[-1]+1
while v[i] < K:
i+=1
return i
@njit
def func2(v):
i= 0
K= v[-1]+1
while v[i] < K:
i+=1
return i
x= np.arange(2)
result2 = func2(x)
result1 = func1(x)
Вот краткий итог результатов:
1) func2
не повысит IndexError
2) func2
возвращает разные результаты (например, иногда 4
; иногда 5
, 9
, 12
и т. д., в основном нестабильный вывод) каждый раз, когда мы запускаем файл в консоли (я использую ipython
version 7.8.0
)
Я не уверен, почему и как это происходит (может быть из-за проблем numba
или spyder
или ipython
или из-за неисправности моего процессора)Я прошу помощи здесь.
Примечание: я использую:
Anaconda's python, версия python 3.7.4
,
версия spyder 3.3.6
,
версия ipython 7.8.0
,
версия numba 0.45.1
ОС Windows 10 64-разрядная