我有一个空数组,我想在每个索引[I,j]处填充任意长度的列表。所以我初始化了一个空数组,这个数组应该包含这样的对象:
@jit(nopython=True, parrallel=True)
def numba_function():
values = np.empty((length, length), dtype=object)
for i in range(10):
for j in range(10):
a_list_of_things = [1,2,3,4]
values[i,j] = a_list_of_things
此操作失败的原因是:
^{pr2}$如果我通过设置nopython=False
关闭numba,代码可以正常工作。在values
数组中设置dtype=list
并不能改善情况。在
有什么妙招可以克服这个问题吗?在
nopython模式下的Numba(从0.43.1版起)不支持对象数组。在
键入对象数组的正确方法是:
但如前所述,这是行不通的:
^{pr2}$这也在the numba documentation中提到:
(重点是我的)
由于
dtype=object
将允许任意Python对象,因此不支持它。而dtype=list
只相当于dtype=object
(documentation)总之,使用
object
数组会很慢,这适用于NumPy数组和numba函数。无论何时选择使用这样的object
数组,您都会隐式地决定不需要高性能。在所以如果你想要性能并且使用NumPy数组,那么你需要重写它,这样你就不会首先使用对象数组,如果它仍然很慢,那么你可以考虑对非对象数组抛出numba。在
相关问题 更多 >
编程相关推荐