Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
485 of 541 menu
◀ ▶

Метод permutation

Метод permutation класса Generator создает случайную перестановку элементов переданного массива или возвращает перемешанный диапазон чисел от нуля до заданного значения. Метод принимает один обязательный параметр - объект, который нужно перемешать (массив, список, кортеж или целое число). Важно, что метод возвращает новый перемешанный массив и не изменяет исходный объект.

Синтаксис

rng.permutation(x)

Параметр x может быть целым числом (тогда возвращается перемешанный диапазон от 0 до x-1), одномерным массивом, списком или кортежем. Метод возвращает новый массив NumPy с перемешанными элементами.

Пример с целым числом

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

import numpy as np rng = np.random.default_rng(42) arr = rng.permutation(10) print(arr)

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

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

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

Пример с массивом

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

import numpy as np rng = np.random.default_rng(42) original = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) arr = rng.permutation(original) print("Исходный массив:", original) print("Перемешанный:", arr)

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

"Исходный массив: [ 1 2 3 4 5 6 7 8 9 10]" "Перемешанный: [ 8 2 6 1 7 3 10 5 4 9]"

Метод создает новый массив, не изменяя исходный.

Пример со списком

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

import numpy as np rng = np.random.default_rng(123) my_list = ['a', 'b', 'c', 'd', 'e'] arr = rng.permutation(my_list) print(arr)

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

['e' 'c' 'a' 'd' 'b']

В результате возвращается массив NumPy со строками в случайном порядке.

Пример с многомерным массивом

При передаче многомерного массива метод переставляет только первую ось (строки), оставляя внутреннюю структуру неизменной:

import numpy as np rng = np.random.default_rng(5) original = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) arr = rng.permutation(original) print("Исходный массив:") print(original) print("Перемешанный:") print(arr)

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

"Исходный массив:" [[1 2 3] [4 5 6] [7 8 9]] "Перемешанный:" [[7 8 9] [4 5 6] [1 2 3]]

Как видите, строки массива были перемешаны, но элементы внутри каждой строки сохранили свой порядок.

Отличие от метода shuffle

В отличие от метода shuffle, который изменяет массив на месте и ничего не возвращает, метод permutation всегда создает новый массив:

import numpy as np rng = np.random.default_rng(1) arr = np.array([1, 2, 3, 4, 5]) # permutation создает новый массив permuted = rng.permutation(arr) print("После permutation:", permuted) print("Исходный массив:", arr) # shuffle изменяет массив на месте rng.shuffle(arr) print("После shuffle:", arr)

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

"После permutation: [3 5 1 2 4]" "Исходный массив: [1 2 3 4 5]" "После shuffle: [3 5 1 2 4]"

Если вам нужно сохранить исходный массив, используйте метод permutation. Если же изменение оригинала допустимо, то метод shuffle будет более эффективным по памяти.

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

  • класс Generator,
    который предоставляет методы для генерации случайных чисел
  • метод shuffle,
    который перемешивает массив на месте
  • метод permuted,
    который перемешивает элементы вдоль заданной оси
  • метод choice,
    который генерирует случайную выборку из массива
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить