gpt4 book ai didi

python - numba中的随机样本

转载 作者:行者123 更新时间:2023-12-05 06:57:17 26 4
gpt4 key购买 nike

出于性能原因,我经常使用 numba,并且对于我的代码,我需要随机抽样而不进行替换。我发现,我可以为此使用 numpy.random 函数,但我注意到它与 random.sample 函数相比非常慢。难道我做错了什么?我怎样才能提高 numba 函数的性能?我将我的代码归结为这个最小的例子:

import numpy as np
import numba as nb

def func2():
List = range(100000)
for x in range(20000):
random.sample(List, 10)

@nb.njit()
def func3():
Array = np.arange(100000)
for x in range(20000):
np.random.choice(Array, 10, False)

print(timeit(lambda: func2(), number=1))
print(timeit(lambda: func3(), number=1))
>>>0.1196
>>>20.1245

编辑:我现在使用我自己的示例函数,它比 np.random.choice 快得多。

@nb.njit()
def func4():
for x in range(20000):
rangeList = list(range(100000))
result = []
for x in range(10):
randint = random.randint(0, len(rangeList) - 1)
result.append(rangeList.pop(randint))
return result
print(timeit(lambda: func4(), number=count))
>>>0.1767

最佳答案

因为我做了一些时间测量,所以我想向您展示结果(关于我对您问题的评论)

import numpy as np
from timeit import timeit
import numba as nb
import random

def func2():
List = range(100000)
for x in range(1000):
random.sample(List, 10)

@nb.njit()
def func3():
Array = np.arange(100000)
for x in range(1000):
np.random.choice(Array, 10, replace=False)

def func4():
Array = np.arange(100000)
for x in range(1000):
np.random.choice(Array, 10, replace=False)

def func5():
Array = np.arange(100000)
for x in range(1000):
np.random.default_rng().choice(Array, 10, replace=False)

print(f"random.sample {timeit(lambda: func2(), number=1)}")
print(f"np.random.choice JIT incl. compiling {timeit(lambda: func3(), number=1)}")
print(f"np.random.choice JIT excl. compiling {timeit(lambda: func3(), number=1)}")
print(f"np.random.choice {timeit(lambda: func4(), number=1)}")
print(f"np.random.default_rng.choice {timeit(lambda: func5(), number=1)}")

给你:

random.sample 0.0090606
np.random.choice JIT incl. compiling 1.9129443
np.random.choice JIT excl. compiling 0.8365084999999999
np.random.choice 1.8339632999999997
np.random.default_rng.choice 0.049018499999999854

关于python - numba中的随机样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64920386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com