Индексирование пустого массива, Numba vs. Numpy - PullRequest
0 голосов
/ 19 ноября 2018

Я экспериментировал с поведением Numba против Numpy для индексации массива, и я столкнулся с чем-то, что я не совсем понимаю; поэтому я надеялся, что кто-то может указать мне правильное направление, что, вероятно, является очень простым вопросом. Ниже приведены две функции, каждая из которых создает пустой массив с помощью команды np.arange. Затем я «добавляю» (экспериментируя с различными методами, чтобы увидеть, как и Numba, и Numpy выполняют / разбивают) к массиву, используя индекс 0, example[0] = 1.

Функция Numba с jit работает без ошибок, но в примере Numpy выдает ошибку:

IndexError: index 0 is out of bounds for axis 0 with size 0

Ошибка Numpy имеет смысл, но я не уверен, почему Numba с включенным jit позволяет работать без ошибок.

import numba as nb
import numpy as np

@nb.jit()
def funcnumba():
    '''
    Add item to position 0 using Numba
    '''
    example = np.arange(0)
    example[0] = 1
    return example

def funcnumpy():
    '''
    Add item to position 0 using Numpy. This produces an error which makes sense
    '''
    example = np.arange(0)
    example[0] = 1
    return example

print(funcnumba())

print(funcnumpy())

1 Ответ

0 голосов
/ 19 ноября 2018

См. Документацию Numba для массивов. :

. В настоящее время не выполняется проверка границ для индексации и срезов массива (...)

Это означает, что в этом случае вы будете писать вне границ массива.Так как это всего лишь один элемент, вам может повезти и вам это сойдет с рук, но вы также можете аварийно завершить работу вашей программы или, что еще хуже, перезаписать какое-то другое значение.См. выпуск # 730 для обсуждения этого вопроса.

...