Python 索引空数组,Numba vs.Numpy

Python 索引空数组,Numba vs.Numpy,python,numpy,numba,Python,Numpy,Numba,我在试验数组索引的NumbavsNumpy行为,遇到了一些我不太理解的东西;所以我希望有人能为我指出正确的方向,这可能是一个非常简单的问题。下面是两个函数,它们都使用np.arange命令创建一个空数组。然后,我使用索引0向数组“追加”(尝试各种方法,以查看Numba和Numpy如何执行/中断),example[0]=1 带有jit的Numba函数运行时没有错误,但是Numpy示例给出了错误: IndexError: index 0 is out of bounds for axis 0 wit

我在试验数组索引的
Numba
vs
Numpy
行为,遇到了一些我不太理解的东西;所以我希望有人能为我指出正确的方向,这可能是一个非常简单的问题。下面是两个函数,它们都使用np.arange命令创建一个空数组。然后,我使用索引0向数组“追加”(尝试各种方法,以查看
Numba
Numpy
如何执行/中断),
example[0]=1

带有
jit
Numba
函数运行时没有错误,但是
Numpy
示例给出了错误:

IndexError: index 0 is out of bounds for axis 0 with size 0
Numpy
错误是有道理的,但是我不确定为什么启用了
jit
Numba
允许操作没有错误

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())
见:

目前没有对数组索引和切片进行边界检查(…)


这意味着您将在本例中写入超出数组边界的内容。因为它只是一个元素,所以您可能会幸运地侥幸逃脱,但您也可能使程序崩溃,或者更糟糕的是,悄悄地覆盖其他一些值。有关它的讨论,请参阅。

我很困惑,为什么它在没有边界检查的情况下抛出错误?这不是更多地与numpy将单个项数组视为标量有关吗?事实上,
np.arange(0)
在我看来似乎是在邀请不可靠的行为。它有目的吗?@roganjosh是NumPy函数引起了错误,而不是Numba函数(这很有意义,因为NumPy确实实现了边界检查)
np.arange(0)
是一个空数组,而不是单个项。就其效用而言,我认为这是一个一致性的问题。我可能在需要工作时使用过它,无论结果是否为空。