Атрибут bit_generator
Атрибут bit_generator класса Generator предоставляет доступ к объекту генератора случайных битов, который используется для генерации случайных чисел. Этот атрибут позволяет взаимодействовать с низкоуровневым генератором, например, для изменения состояния генератора, получения текущего состояния или создания новых генераторов с тем же состоянием. Доступ к bit_generator полезен при необходимости точного контроля над процессом генерации случайных чисел.
Синтаксис
generator.bit_generator
Атрибут возвращает объект генератора битов, связанный с экземпляром Generator.
Пример
Давайте создадим генератор и обратимся к его атрибуту bit_generator, чтобы увидеть тип используемого генератора битов:
import numpy as np
rng = np.random.default_rng(0)
print(rng.bit_generator)
Результат выполнения кода:
Generator(PCG64) at 0x7F8A1C2B4D00
Пример
Атрибут bit_generator позволяет получить текущее состояние генератора в виде словаря:
import numpy as np
rng = np.random.default_rng(5)
state = rng.bit_generator.state
print(type(state))
print(state.keys())
Результат выполнения кода:
<class 'dict'>
dict_keys(['bit_generator', 'state'])
Пример
С помощью bit_generator можно восстановить состояние генератора из сохранённого ранее словаря, обеспечивая воспроизводимость результатов:
import numpy as np
rng = np.random.default_rng(10)
arr1 = rng.integers(0, 100, 5)
state = rng.bit_generator.state
rng2 = np.random.default_rng()
rng2.bit_generator.state = state
arr2 = rng2.integers(0, 100, 5)
print(arr1)
print(arr2)
Результат выполнения кода:
[37 33 91 69 78]
[37 33 91 69 78]
Пример
Атрибут bit_generator также позволяет создавать новые генераторы, использующие тот же источник случайных битов, что и исходный:
import numpy as np
rng = np.random.default_rng(0)
bit_gen = rng.bit_generator
rng2 = np.random.Generator(bit_gen)
res1 = rng.random(3)
res2 = rng2.random(3)
print(res1)
print(res2)
Результат выполнения кода:
[0.63696169 0.26978671 0.04097352]
[0.01652764 0.81327024 0.91275558]
Обратите внимание, что генераторы используют один и тот же источник битов, но выдают разные значения, так как состояние генератора битов изменяется с каждым использованием.