numba中的numpy数组高级索引

numba中的numpy数组高级索引,numpy,indexing,numba,Numpy,Indexing,Numba,我正在将一个函数转换为numba(nopython模式)。在这个函数中,我需要访问2D数组的一些元素,这些元素的行索引包含在列表中,列是固定的。 在通常的python中,我会: array[list,column_index] 但在numba中编译时,我收到以下错误: TypingError: Invalid use of Function(<built-in function getitem>) with argument(s) of type(s): (array(float6

我正在将一个函数转换为numba(nopython模式)。在这个函数中,我需要访问2D数组的一些元素,这些元素的行索引包含在列表中,列是固定的。 在通常的python中,我会:

array[list,column_index]
但在numba中编译时,我收到以下错误:

TypingError: Invalid use of Function(<built-in function getitem>) with argument(s) of type(s): (array(float64, 2d, C), (reflected list(int64), int64))
 * parameterized
In definition 0:
    All templates rejected with literals.
In definition 1:
    All templates rejected without literals.
In definition 2:
    All templates rejected with literals.
In definition 3:
    All templates rejected without literals.
In definition 4:
    All templates rejected with literals.
In definition 5:
    All templates rejected without literals.
In definition 6:
    TypeError: unsupported array index type reflected list(int64) in (reflected list(int64), int64)
    raised from C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\typing\arraydecl.py:71
In definition 7:
    TypeError: unsupported array index type reflected list(int64) in (reflected list(int64), int64)
    raised from C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\typing\arraydecl.py:71
This error is usually caused by passing an argument of a type that is unsupported by the named function.
Traceback (most recent call last):

  File "<ipython-input-123-c5ca441bb6b7>", line 1, in <module>
    tmp = L.numba_montecarlo_barab(SEED,w,R,T,mpx,0.5)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\dispatcher.py", line 367, in _compile_for_args
    raise e

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\dispatcher.py", line 324, in _compile_for_args
    return self.compile(tuple(argtypes))

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler_lock.py", line 32, in _acquire_compile_lock
    return func(*args, **kwargs)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\dispatcher.py", line 655, in compile
    cres = self._compiler.compile(args, return_type)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\dispatcher.py", line 82, in compile
    pipeline_class=self.pipeline_class)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 926, in compile_extra
    return pipeline.compile_extra(func)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 374, in compile_extra
    return self._compile_bytecode()

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 857, in _compile_bytecode
    return self._compile_core()

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 844, in _compile_core
    res = pm.run(self.status)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler_lock.py", line 32, in _acquire_compile_lock
    return func(*args, **kwargs)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 255, in run
    raise patched_exception

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 246, in run
    stage()

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 717, in stage_nopython_backend
    self._backend(lowerfn, objectmode=False)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 666, in _backend
    lowered = lowerfn()

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 653, in backend_nopython_mode
    self.metadata)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 1050, in native_lowering_stage
    lower.create_cpython_wrapper(flags.release_gil)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\lowering.py", line 272, in create_cpython_wrapper
    release_gil=release_gil)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\targets\cpu.py", line 149, in create_cpython_wrapper
    builder.build()

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\callwrapper.py", line 122, in build
    self.build_wrapper(api, builder, closure, args, kws)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\callwrapper.py", line 155, in build_wrapper
    val = cleanup_manager.add_arg(builder.load(obj), ty)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\callwrapper.py", line 58, in add_arg
    cleanup_arg()

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\callwrapper.py", line 41, in cleanup_arg
    self.api.reflect_native_value(ty, native.value, self.env_manager)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\pythonapi.py", line 1417, in reflect_native_value
    impl(typ, val, c)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\targets\boxing.py", line 740, in reflect_list
    raise TypeError(msg)

TypeError: Failed in nopython mode pipeline (step: nopython mode backend)
cannot reflect element of reflected container: reflected list(reflected list(reflected list(int64)))
产生以下错误:

TypingError: Invalid use of Function(<built-in function getitem>) with argument(s) of type(s): (array(float64, 2d, C), (reflected list(int64), int64))
 * parameterized
In definition 0:
    All templates rejected with literals.
In definition 1:
    All templates rejected without literals.
In definition 2:
    All templates rejected with literals.
In definition 3:
    All templates rejected without literals.
In definition 4:
    All templates rejected with literals.
In definition 5:
    All templates rejected without literals.
In definition 6:
    TypeError: unsupported array index type reflected list(int64) in (reflected list(int64), int64)
    raised from C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\typing\arraydecl.py:71
In definition 7:
    TypeError: unsupported array index type reflected list(int64) in (reflected list(int64), int64)
    raised from C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\typing\arraydecl.py:71
This error is usually caused by passing an argument of a type that is unsupported by the named function.
Traceback (most recent call last):

  File "<ipython-input-123-c5ca441bb6b7>", line 1, in <module>
    tmp = L.numba_montecarlo_barab(SEED,w,R,T,mpx,0.5)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\dispatcher.py", line 367, in _compile_for_args
    raise e

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\dispatcher.py", line 324, in _compile_for_args
    return self.compile(tuple(argtypes))

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler_lock.py", line 32, in _acquire_compile_lock
    return func(*args, **kwargs)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\dispatcher.py", line 655, in compile
    cres = self._compiler.compile(args, return_type)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\dispatcher.py", line 82, in compile
    pipeline_class=self.pipeline_class)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 926, in compile_extra
    return pipeline.compile_extra(func)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 374, in compile_extra
    return self._compile_bytecode()

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 857, in _compile_bytecode
    return self._compile_core()

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 844, in _compile_core
    res = pm.run(self.status)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler_lock.py", line 32, in _acquire_compile_lock
    return func(*args, **kwargs)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 255, in run
    raise patched_exception

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 246, in run
    stage()

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 717, in stage_nopython_backend
    self._backend(lowerfn, objectmode=False)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 666, in _backend
    lowered = lowerfn()

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 653, in backend_nopython_mode
    self.metadata)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\compiler.py", line 1050, in native_lowering_stage
    lower.create_cpython_wrapper(flags.release_gil)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\lowering.py", line 272, in create_cpython_wrapper
    release_gil=release_gil)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\targets\cpu.py", line 149, in create_cpython_wrapper
    builder.build()

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\callwrapper.py", line 122, in build
    self.build_wrapper(api, builder, closure, args, kws)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\callwrapper.py", line 155, in build_wrapper
    val = cleanup_manager.add_arg(builder.load(obj), ty)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\callwrapper.py", line 58, in add_arg
    cleanup_arg()

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\callwrapper.py", line 41, in cleanup_arg
    self.api.reflect_native_value(ty, native.value, self.env_manager)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\pythonapi.py", line 1417, in reflect_native_value
    impl(typ, val, c)

  File "C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site-packages\numba\targets\boxing.py", line 740, in reflect_list
    raise TypeError(msg)

TypeError: Failed in nopython mode pipeline (step: nopython mode backend)
cannot reflect element of reflected container: reflected list(reflected list(reflected list(int64)))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
tmp=L.numba_montecarlo_barab(种子,w,R,T,mpx,0.5)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\dispatcher.py”,第367行,位于\u compile\u for \u args中
提高e
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\dispatcher.py”,第324行,位于\u-compile\u中,用于\u-args
返回self.compile(元组(argtypes))
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\compiler\u lock.py”,第32行,在\u acquire\u compile\u lock中
返回函数(*args,**kwargs)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\dispatcher.py”,第655行,编译
cres=self.\u compiler.compile(参数,返回类型)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\dispatcher.py”,第82行,编译
管道类=自管道类)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\compiler.py”,第926行,在compile\u extra中
返回管道.compile_extra(func)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\compiler.py”,第374行,在compile\u extra中
返回self.\u编译\u字节码()
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\compiler.py”,第857行,位于编译字节码中
返回self.\u编译\u核心()
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\compiler.py”,第844行,在编译内核中
res=pm.run(self.status)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\compiler\u lock.py”,第32行,在\u acquire\u compile\u lock中
返回函数(*args,**kwargs)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\compiler.py”,第255行,正在运行
引发修补的\u异常
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\compiler.py”,第246行,正在运行
阶段(
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\compiler.py”,第717行,位于stage\u nopython\u后端
self.\u后端(lowerfn,objectmode=False)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\compiler.py”,第666行,在_backend中
降低=降低fn()
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\compiler.py”,第653行,处于后端模式
self.com(元数据)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\compiler.py”,第1050行,在本机阶段
降低。创建\u cpython\u包装(flags.release\u gil)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\looving.py”,第272行,位于create\U cpython\U包装器中
释放(gil=释放(gil)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\targets\cpu.py”,第149行,位于create\U cpython\U包装器中
builder.build()
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\callwrapper.py”,第122行,内部版本
self.build_包装器(api、生成器、闭包、参数、kws)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\callwrapper.py”,第155行,在build\u wrapper中
val=cleanup\u manager.add\u arg(builder.load(obj),ty)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\callwrapper.py”,第58行,在add_arg中
清理_arg()
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\callwrapper.py”,第41行,在cleanup\u arg中
self.api.reflect\u native\u值(ty、native.value、self.env\u管理器)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\pythonapi.py”,第1417行,在reflect\u native\u值中
impl(典型值、val、c)
文件“C:\ProgramData\Anaconda2\envs\Python 3.5\lib\site packages\numba\targets\boxing.py”,第740行,在反射列表中
raise TypeError(msg)
TypeError:在nopython模式管道中失败(步骤:nopython模式后端)
无法反映反射容器的元素:反射列表(反射列表(反射列表(int64)))
转换为元组也不起作用,但我知道元组不受支持


在numba nopython模式下使用高级索引的正确方法是什么?

我也有同样的问题。请尝试以下操作:
array[:,column_index].take(list)
。它返回与
array[np.array(list),column_index]
相同的错误,我刚刚运行了
a[:,1]。在
numba.jit下take([1,2,3])
,一切正常。当我做
a[[1,2,3],1]
时,我得到了相同的错误。版本:numba:0.41.0;numpy 1.15.4;Python 3.7.1。所以,简单的索引和take对我来说很有用
a
是一个10x10形状的随机数组。是的,它确实应该可以工作。最后,我决定放弃高级索引,将所有内容放入for循环中,但错误依然存在。这是因为传递了一个列表作为参数,而numba目前不支持这个参数。非常感谢<代码>数组[np.array(list),column\u index]
可能也会起作用。