是否可以在nopython并行模式下将numba与numpy sum一起用于for循环内的数组切片,而无需创建竞争条件?

问题描述

初始条件: 数组数据是一个长度为50000 p的1d numpy数组,它是一个整数,可以在10到300之间变化。

这会导致错误

from numba import jit,njit,prange
import numpy as np

@njit(parallel=True)
def jitmovavg(data,p):
    arr_size=len(data)
    mean_array=np.zeros(arr_size-p+1)
    for i in prange(len(mean_array)):
        mean_array[i]=np.sum(data[i:i+p])/p
    return mean_array

这不会导致错误,但是对于大量的p来说很慢:

@njit
def jitmovavg(data,p):
    arr_size=len(data)
    mean_array=np.zeros(arr_size-p+1)
    for i in range(len(mean_array)):
        mean_array[i]=np.sum(data[i:i+p])/p
    return mean_array

我猜想这与并行循环中的竞争条件有关。有办法解决这个问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)