无输入的函数的Numba矢量化

2024-05-28 23:34:14 发布

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

我想用numba.vectorize来并行化一个函数,但是我的函数不接受任何输入。目前,我使用一个虚拟数组和一个从未使用过的虚拟输入函数。在

有没有更优雅/快速的方法(可能不使用numba.vectorize)?在

代码示例(不是我的实际代码,仅用于演示如何放弃输入):

import numpy as np
from numba import vectorize

@vectorize(["int32(int32)"], nopython=True)
def particle_path(discard_me):
    x = 0
    for _ in range(10):
        x += np.random.uniform(0, 1)
    return np.int32(x)

arr = particle_path(np.empty(1024, dtype=np.int32))
print(arr)

Tags: path方法函数代码importnumpy示例as
1条回答
网友
1楼 · 发布于 2024-05-28 23:34:14

如果只处理1D数组,那么可以使用下面的方法,其中数组必须在函数外部实例化。这里似乎没有任何理由使用vectorize,您可以简单地用jit来实现目标,尽管您必须使用它显式地在数组元素上编写循环。如果阵列始终为1D,则可以使用:

import numpy as np
from numba import jit

@jit(nopython=True)
def particle_path(out):
    for i in range(len(out)):
        x = 0
        for _ in range(10):
            x += np.random.uniform(0, 1)
        out[i] = x

arr = np.empty(1024, dtype=np.int32)
particle_path(arr)

类似地,您可以使用^{}属性处理任何维度数组(确保使用.size来获得数组中元素的总数):

^{pr2}$

最后,如果每次运行函数时都需要一个新数组,则可以在函数内部创建数组(如果要反复调用函数并希望重写同一数组,从而节省了反复重新分配同一数组的时间,请使用上述方法)。在

@jit(nopython=True)
def particle_path(num):
    out = np.empty(shape=num, dtype=np.int32)
    for i in range(num):
        x = 0
        for _ in range(10):
            x += np.random.uniform(0, 1)
        out[i] = x
    return out

arr = particle_path(1024)

相关问题 更多 >

    热门问题