Перемешать массив с python, рандомизировать порядок элементов массива с python
какой самый простой способ перетасовать массив с помощью python?
9 ответов:
другие ответы самые простые, однако это немного раздражает, что
random.shuffle
метод на самом деле ничего не возвращает - он просто сортирует данный список. Если вы хотите цепочку вызовов или просто быть в состоянии объявить перетасованный массив в одной строке, вы можете сделать:import random def my_shuffle(array): random.shuffle(array) return array
затем вы можете сделать такие строки:
for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):
альтернативный способ сделать это с помощью sklearn
from sklearn.utils import shuffle X=[1,2,3] y = ['one', 'two', 'three'] X, y = shuffle(X, y, random_state=0) print(X) print(y)
выход:
[2, 1, 3] ['two', 'one', 'three']
преимущество: вы можете случайно несколько массивов одновременно, не нарушая карт. И "random_state" может управлять перетасовкой для воспроизводимого поведения.
при работе с обычными списками Python,
random.shuffle()
будет делать работу так же, как показывают предыдущие ответы.но когда дело доходит до
ndarray
(numpy.array
),random.shuffle
кажется, сломать оригиналndarray
. Вот пример:import random import numpy as np import numpy.random a = np.array([1,2,3,4,5,6]) a.shape = (3,2) print a random.shuffle(a) # a will definitely be destroyed print a
просто использовать:
np.random.shuffle(a)
как
random.shuffle
,np.random.shuffle
перемешивает массив на месте.
на всякий случай вы хотите новый массив вы можете использовать
sample
:import random new_array = random.sample( array, len(array) )
В дополнение к предыдущим ответам, я хотел бы ввести еще одну функцию.
numpy.random.shuffle
а такжеrandom.shuffle
выполнить перетасовки. Однако, если вы хотите вернуть перетасованный массивnumpy.random.permutation
функции для использования.