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