微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决是否可以在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 举报,一经查实,本站将立刻删除。