Numba/Numpy-理解错误消息

Numba/Numpy-理解错误消息,numpy,numba,Numpy,Numba,我正在用Numba做实验,试图加速我正在研究的联合查找算法。下面是一些示例代码。当我用一些样本数据进行实验时,我无法理解Numba似乎提出的抱怨类型 从numba导入jit 将numpy作为np导入 索引=np.arange(8806806,数据类型=np.int64) 大小=np.ones(8806806,数据类型=np.int64) 连接的组件=8806806 @jit(npython=True) def根目录(p:int)->int: 而p!=指数[p]: 指数[p]=指数[p]] p=指

我正在用Numba做实验,试图加速我正在研究的联合查找算法。下面是一些示例代码。当我用一些样本数据进行实验时,我无法理解Numba似乎提出的抱怨类型

从numba导入jit
将numpy作为np导入
索引=np.arange(8806806,数据类型=np.int64)
大小=np.ones(8806806,数据类型=np.int64)
连接的组件=8806806
@jit(npython=True)
def根目录(p:int)->int:
而p!=指数[p]:
指数[p]=指数[p]]
p=指数[p]
返回p
@jit(npython=True)
def已连接(p:int,q:int)->bool:
返回根(p)=根(q)
@jit(npython=True)
def接头(p:int,q:int)->无:
根1=根(p)
根2=根(q)
如果root1==root2:
返回
如果(大小[root1]<大小[root2]):
索引[root1]=root2
大小[root2]+=大小[root1]
其他:
索引[root2]=root1
大小[root1]+=大小[root2]
连接的\u组件-=1
@jit(nopython=True)
def过程_值(arr):
对于arr中的行:
typed\u arr=row.astype('int64')
对于zip中的第一个,第二个(arr,arr[1:]):
工会(第一、第二)
过程值(
np.数组(
[np.数组([80183614645960]),
np.数组([11375557763897]),
np.数组([75329432248813]),
数组([53527377146635904735527382712260]),dtype='object'))
我无法理解这个错误:

TypingError                               Traceback (most recent call last)
<ipython-input-45-62735e65f581> in <module>
     44             np.array([1137555, 7763897]),
     45             np.array([7532943, 2248813]),
---> 46             np.array([5352737,   71466, 3590473, 5352738, 2712260])], dtype='object'))            

/opt/conda/lib/python3.7/site-packages/numba/core/dispatcher.py in _compile_for_args(self, *args, **kws)
    399                 e.patch_message(msg)
    400 
--> 401             error_rewrite(e, 'typing')
    402         except errors.UnsupportedError as e:
    403             # Something unsupported is present in the user code, add help info

/opt/conda/lib/python3.7/site-packages/numba/core/dispatcher.py in error_rewrite(e, issue_type)
    342                 raise e
    343             else:
--> 344                 reraise(type(e), e, None)
    345 
    346         argtypes = []

/opt/conda/lib/python3.7/site-packages/numba/core/utils.py in reraise(tp, value, tb)
     78         value = tp()
     79     if value.__traceback__ is not tb:
---> 80         raise value.with_traceback(tb)
     81     raise value
     82 

TypingError: Failed in nopython mode pipeline (step: nopython frontend)
non-precise type array(pyobject, 1d, C)
[1] During: typing of argument at <ipython-input-45-62735e65f581> (36)

File "<ipython-input-45-62735e65f581>", line 36:
def process_values(arr):
    for row in arr:
    ^
TypingError回溯(最近一次调用)
在里面
44 np.数组([11375557763897]),
45 np.数组([7532943,2248813]),
--->46 np.数组([53527377146635904735527382712260]),dtype='object'))
/opt/conda/lib/python3.7/site-packages/numba/core/dispatcher.py in _compile_for_args(self,*args,**kws)
399 e.patch_信息(msg)
400
-->401错误\u重写(例如,“键入”)
402错误除外。不支持错误为e:
403#用户代码中存在不支持的内容,请添加帮助信息
/opt/conda/lib/python3.7/site-packages/numba/core/dispatcher.py出错\u重写(e,问题类型)
342上升e
343其他:
-->344重新拍卖(e类、e类、无)
345
346 argtypes=[]
/reraise中的opt/conda/lib/python3.7/site-packages/numba/core/utils.py(tp、value、tb)
78值=tp()
79如果值.\uuuu回溯\uuuuu不是tb:
--->80提升值。带回溯(tb)
81提高价值
82
TypingError:在nopython模式管道中失败(步骤:nopython前端)
非精确类型数组(pyobject,1d,C)
[1] 期间:在(36)处键入参数
文件“”,第36行:
def过程_值(arr):
对于arr中的行:
^

这与
处理\u值
获取形状不规则的数组有关吗?有什么建议吗?谢谢

问题是Numba不接受数据类型为“object”的数组。您似乎要在数组中放置数组,您必须在列表中使用列表。在Numba中查找键入的.List类


或者,您可以使用笨拙的数组:

问题是Numba不接受数据类型为“object”的数组。您似乎要在数组中放置数组,您必须在列表中使用列表。在Numba中查找键入的.List类

或者,您也可以使用笨拙的数组: