Почему длина массива, переданного np.random.shuffle (), влияет на np.random.uniform ()? - PullRequest
0 голосов
/ 06 марта 2020

Простой пример: изменение значений внутри массива aa не приводит к изменению результата np.random.uniform():

import numpy as np
np.random.seed(12345)
aa = np.array([3., 56., 7])
np.random.shuffle(aa)
print(np.random.uniform())

, но при изменении его длина делает

import numpy as np
np.random.seed(12345)
aa = np.array([3., 56., 7, 0.])
np.random.shuffle(aa)
print(np.random.uniform())

Я пытался проверить источник , но способ написания выше моих навыков Python.

1 Ответ

2 голосов
/ 06 марта 2020

Python использует генератор псевдослучайных чисел, который создает детерминированную c последовательность значений. Повторное заполнение даст ту же самую последовательность, но если вы используете разные суммы, вы окажетесь в разных местах последовательности.

Перемешивание n элементов вызывает генератор случайных чисел n-1 раз, чтобы Определите, какой другой элемент нужно поменять в каждой позиции массива. Больше n означает больше звонков в PRNG. Поскольку ваш более короткий массив имеет на 1 элемент меньше, последовательности PRNG не совпадают c на 1 в конце двух перемешиваний. Вы можете подтвердить это, сгенерировав два случайных числа, а не одно для этого сценария:

import numpy as np

MAX = 2**32
np.random.seed(12345)
aa = np.array([3., 56., 7, 0.])
np.random.shuffle(aa)
print('randint after shuffling 4 items')
print(np.random.randint(MAX))  # 561383553

print('\ntwo calls to randint after shuffling 3 items')
np.random.seed(12345)
bb = np.array([3., 56., 7])
np.random.shuffle(bb)
print(np.random.randint(MAX))  # 1358822685
print(np.random.randint(MAX))  # 561383553
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...