파이썬으로 배열을 셔플, 파이썬으로 배열 항목 순서를 무작위 화하십시오.

StackOverflow https://stackoverflow.com/questions/473973

  •  19-08-2019
  •  | 
  •  

문제

파이썬으로 배열을 셔플하는 가장 쉬운 방법은 무엇입니까?

도움이 되었습니까?

해결책

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]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top