Перемешать массив с 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функции для использования.