파이썬으로 배열을 셔플, 파이썬으로 배열 항목 순서를 무작위 화하십시오.
문제
파이썬으로 배열을 셔플하는 가장 쉬운 방법은 무엇입니까?
해결책
import random
random.shuffle(array)
다른 팁
import random
random.shuffle(array)
이 작업을 수행하는 대안적인 방법 스카리
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'는 재현 가능한 행동을 위해 셔플 링을 제어 할 수 있습니다.
다른 대답이 가장 쉽지만 조금 성가신 것입니다. random.shuffle
메소드는 실제로 아무것도 반환하지 않습니다. 주어진 목록을 정렬합니다. 통화를 체인하려고하거나 한 줄로 섞인 배열을 선언 할 수 있다면 다음을 수행 할 수 있습니다.
import random
def my_shuffle(array):
random.shuffle(array)
return array
그런 다음 다음과 같은 줄을 할 수 있습니다.
for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):
일반 파이썬 목록을 다룰 때 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) )
임의의 키로 배열을 정렬 할 수 있습니다
sorted(array, key = lambda x: random.random())
하지만 보입니다 random.shuffle(array)
c
이전 답변 외에도 다른 기능을 소개하고 싶습니다.
numpy.random.shuffle
만큼 잘 random.shuffle
현장 셔플 링을 수행하십시오. 그러나 셔플 어레이를 반환하려면 numpy.random.permutation
사용하는 기능입니다.
내가 사용한 모르겠다 random.shuffle()
그러나 그것은 나에게 '없다'라고 반환합니다. 그래서 나는 이것을 썼습니다. 누군가에게 도움이 될 것입니다.
def shuffle(arr):
for n in range(len(arr) - 1):
rnd = random.randint(0, (len(arr) - 1))
val1 = arr[rnd]
val2 = arr[rnd - 1]
arr[rnd - 1] = val1
arr[rnd] = val2
return arr
# arr = numpy array to shuffle
def shuffle(arr):
a = numpy.arange(len(arr))
b = numpy.empty(1)
for i in range(len(arr)):
sel = numpy.random.random_integers(0, high=len(a)-1, size=1)
b = numpy.append(b, a[sel])
a = numpy.delete(a, sel)
b = b[1:].astype(int)
return arr[b]