파이썬으로 배열을 섞는 가장 쉬운 방법은 무엇입니까?
new_array = random.sample( array, len(array) )
.
파이썬으로 배열을 섞는 가장 쉬운 방법은 무엇입니까?
new_array = random.sample( array, len(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
현재 위치에서 배열을 섞습니다.
임의의 키로 배열을 정렬 할 수 있습니다
sorted(array, key = lambda x: random.random())
키는 한 번만 읽을 수 있으므로 정렬하는 동안 항목을 비교하는 것이 여전히 효율적입니다.
random.shuffle(array)
C로 작성된 이후 더 빠를 것 같습니다.
array
나는 의미 Random
요소 : 즉,이에 발생 될 수 있습니다 새로운 클래스 인스턴스마다. 나는 실제로 확실하지 않다 : 이것이 잘못된 방법 일 것입니다 : 당신은를 생성하고 호출해야합니다 . 그러나 파이썬 이 어떻게 작동 하는지 잘 모르겠다lambda
random.random()
Random
java
Random rng = Random()
rng.nextGaussian()
random.random()
나는 내가 사용한 것을 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
그주의 random.shuffle()
는 반복의 원인으로 다차원 배열에 사용할 수 없습니다.
첫 번째 차원을 따라 배열을 셔플한다고 가정하면 다음 테스트 예제를 만들 수 있습니다.
import numpy as np
x = np.zeros((10, 2, 3))
for i in range(10):
x[i, ...] = i*np.ones((2,3))
따라서 첫 번째 축을 따라 i 번째 요소는 모든 요소가 i와 동일한 2x3 행렬에 해당합니다.
다차원 배열에 올바른 셔플 기능을 사용하면 즉 np.random.shuffle(x)
, 원하는대로 배열이 첫 번째 축을 따라 셔플됩니다. 그러나 사용 random.shuffle(x)
하면 반복이 발생합니다. len(np.unique(x))
셔플 후 실행하여 이것을 확인할 수 있습니다.np.random.shuffle()
하지만 5를 사용하면 약 5를 제공하여이를 확인할 수 random.shuffle()
있습니다.