РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
484 of 541 menu

Метод shuffle

Метод shuffle класса Generator изменяет порядок элементов массива случайным образом. Он работает непосредственно с исходным массивом (in-place), то есть не создает новый массив, а переставляет элементы в существующем. Первым параметром метод принимает массив или изменяемую последовательность. Для многомерных массивов по умолчанию перемешиваются только элементы первого измерения (строки), если не указано иное.

Синтаксис

generator.shuffle(arr, axis=None)

Параметры

Метод имеет два параметра:

  • arr - массив или изменяемая последовательность, элементы которой нужно перемешать. Для многомерных массивов перемешивание происходит вдоль первой оси по умолчанию.
  • axis - необязательный параметр, определяющий ось, вдоль которой выполняется перемешивание. Если ось не указана, перемешиваются элементы вдоль первой оси. Для одномерных массивов параметр игнорируется.

Пример

Давайте создадим генератор случайных чисел с фиксированным зерном и перемешаем одномерный массив:

import numpy as np rng = np.random.default_rng(0) arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) rng.shuffle(arr) print(arr)

Результат выполнения кода:

[6 9 7 2 3 8 1 5 4 0]

Обратите внимание, что исходный массив был изменен - элементы перемешались случайным образом.

Пример

Теперь перемешаем двумерный массив. По умолчанию перемешиваются только строки (первая ось):

import numpy as np rng = np.random.default_rng(1) arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) rng.shuffle(arr) print(arr)

Результат выполнения кода:

[[7 8 9] [1 2 3] [4 5 6]]

Как видно, строки массива поменялись местами, а содержимое каждой строки осталось без изменений.

Пример

С помощью параметра axis можно указать, по какой оси перемешивать элементы. Например, перемешаем столбцы двумерного массива (ось 1):

import numpy as np rng = np.random.default_rng(2) arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) rng.shuffle(arr, axis=1) print(arr)

Результат выполнения кода:

[[3 1 2] [6 4 5] [9 7 8]]

Теперь элементы в каждой строке перемешались независимо - столбцы переставлены внутри каждой строки.

Пример

Метод shuffle работает только с изменяемыми объектами. Попытка передать неизменяемую последовательность вызовет ошибку:

import numpy as np rng = np.random.default_rng(3) arr_tuple = (1, 2, 3, 4, 5) try: rng.shuffle(arr_tuple) except TypeError as e: print(e)

Результат выполнения кода:

"shuffle() only supports mutable sequence types"

Для кортежей и других неизменяемых последовательностей используйте метод permutation, который возвращает новый перемешанный массив.

Пример

Метод shuffle также можно использовать с обычными списками Python:

import numpy as np rng = np.random.default_rng(4) my_list = [10, 20, 30, 40, 50] rng.shuffle(my_list) print(my_list)

Результат выполнения кода:

[40, 10, 50, 30, 20]

Обратите внимание, что метод изменяет список на месте, как и в случае с массивами.

Смотрите также

  • метод permutation,
    который возвращает новый перемешанный массив, не изменяя исходный
  • метод permuted,
    который перемешивает элементы вдоль указанной оси независимо для каждого среза
  • метод choice,
    который генерирует случайную выборку из массива с возможностью повторений
  • метод random,
    который генерирует случайные числа в полуоткрытом интервале [0.0, 1.0)
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить