Самый быстрый способ генерировать случайные целые числа в Cython? - PullRequest
0 голосов
/ 05 мая 2020

Я пишу программу, которая везде использует случайное поведение.

Чтобы проиллюстрировать, мой код выглядит примерно так:

cdef int r = 8, c = 14

cdef class myclass1:
    pass

many_functions = [f1, f2, ..., f20, ...]
# Each functions are quite different in code structures,
# so I can't just generate one big random sequence and use them

cdef myclass1 x

old_container = [...] # contains many myclass1 instances

for _ in range(1000): #main loop
    new_container = []
    for x in old_container:
        func = random.choice(many_functions)
        new_container.append(func(x))
    old_container = new_container
# an example for f
cdef myclass1 f_n(myclass1 x):
    cdef int a, b, c
    a = random.randint(r)
    b = random.randint(c)
    c = random.randint(rc)
    # do something and return x

В настоящее время я использую numpy.random.Generator.integers всякий раз, когда мне это нужно или более случайных целых чисел.

cdef int m
m = rng.integers(r)

Я не уверен, что это лучший способ. Можно ли использовать numpy .random, даже если мне каждый раз нужно небольшое количество рандов? Может быть лучше использовать просто random.randint в чистом python? Или есть какие-то другие варианты получше?

* edit: меня беспокоит только скорость. Извините за расплывчатый вопрос.

...