我尝试遵循以下已记录的示例进行并行化,如下所示:@numba.jit(nopython=True)def foo(uIdx, grids): return uIdx@numba.jit(nopython=True, parallel=True)def bar(grid, grids): LIdxGrid = np.zeros(len(grid)) for uIdx in numba.prange(len(grid)): LIdxGrid[uIdx] = foo(uIdx, grids) return LIdxGridif __name__ == '__main__': import numpy as np grid = np.arange(12) grids = (grid, grid) bar(grid, grids)但这似乎行不通。这个问题似乎源于传递grids(甚至没有在最终foo函数中使用它)。如果我在foo和中删除该引用bar,它将起作用:bar(grid, 0)Out[47]: array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11.])如何解决/解决此问题?
1 回答
缥缈止盈
TA贡献2041条经验 获得超4个赞
对引用计数项(如np.ndarrays)的支持是非常新的(自numba 0.39起),我不确定是否使用tupleref的s。计数项目已经有效。Afaik的参考书tuple。尚不支持计数的项目。因此,为确保您的代码正常运行,您必须将替换tuple为list:
if __name__ == '__main__':
import numpy as np
grid = np.arange(12)
grids = [grid, grid]
bar(grid, grids)
并确保您已安装numba版本0.39!否则,它将无法正常工作。
当然,列表不是元组,因此这只是一种解决方法。但是,只要引用元组,就没有其他方法可以解决此问题。不完全支持计数的项目。
添加回答
举报
0/150
提交
取消