我该怎么做而不是使用数字矢量化在丘比?

2024-06-10 14:28:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我应该如何将定义的函数应用于丘比阵列而不是np.矢量化? 在cupy中实现了类似的功能吗?在

我正在用python3.6.9编写模拟程序。在

我想在GPU(GTX1060,NVIDIA)和CuPy(CUDA10.1为6.0.0)进行模拟。在

在原始代码中,函数数字矢量化已用于将定义的函数应用于np.数组. 然而,在CuPy中还没有实现相同的功能。在

原始代码如下:

#For define function
def rate(tmean,x,y,z):
    rate = 1/z/(1 + math.exp(-x*(tmean-y)))
    #DVR<0
    if rate < 0:
        rate = 0
    return rate

#tmean is temperature data(365,100,100) and loaded as np.array
#paras is parameter(3,100,100)
#vectorized
f = np.vectorize(rate)
#roop
for i in range(365):
    #calc developing rate(by function "rate") and accumulate
    dvi[i,:,:] = dvi[i-1,:,:] + f(tmean[i,:,:],paras[0],paras[1],paras[2])

我知道numpy的功能在丘比已经实现了。 所以我改变了

^{pr2}$

f= cp.vectorized(rate)

但是AttributeError发生了。在


Tags: and函数代码功能定义rateisnp
1条回答
网友
1楼 · 发布于 2024-06-10 14:28:48

GPU不能并行化任意Python代码。用NumPy兼容的操作编写所有内容,比如

def rate_(xp, tmean,x,y,z):
    rate = 1/z/(1 + xp.exp(-x*(tmean-y)))
    rate[rate < 0] = 0
    return rate

f = functools.partial(rate_, xp=cupy)

为了加快速度,您可以使用cupy.ElementwiseKernelhttps://docs-cupy.chainer.org/en/stable/tutorial/kernel.html),它为矢量化操作创建一个单独的内核。在

^{pr2}$

{cd2>尝试从Python创建代码。在

@cupy.fuse()
def f(tmean,x,y,z):
    rate = 1/z/(1 + cupy.exp(-x*(tmean-y)))
    return cupy.where(rate < 0, 0, rate)  # __setitem__ is not fully supported

相关问题 更多 >