我有一个函数,它已经被njited并返回一个长度不同的uint32列表。
@numba.njit()
def inner_function(A: numba.float32[:]) -> List[int]:
# ...
字符串
该函数在循环中被调用了大量次,这可以被并行化,因为没有数据依赖性。
但由于函数返回的长度不同,因此不能使用预分配数组。
我目前使用的是一种顺序方法,使用了像这样的numbas类型列表
@numba.njit()
def looping_function(A: numba.float32[:,:]) -> List[List[int]]:
result = List()
for i in range(A.shape[0]):
tmp = inner_function(A[i])
result.append(tmp)
return result
型
有没有一种方法可以初始化我的结果列表(或任何其他数据结构),这样我就可以索引它,而不是像这样附加到它:
@numba.njit(parallel=True)
def looping_function(A: numba.float32[:,:]):
result = ???
for i in numba.prange(A.shape[0]):
tmp = inner_function(A[i])
result[i] = tmp
return result
型
1条答案
按热度按时间olmpazwi1#
我找到了一个解决方案,它不是很令人满意,但对我的用例足够好。这将预分配为带有占位符0的列表,以确保类型推断。然后我可以删除占位符并根据需要进行扩展。
字符串