programing

python을 사용하여 어레이 셔플, python을 사용하여 어레이 항목 순서 랜덤화

kingscode 2022. 10. 10. 21:48
반응형

python을 사용하여 어레이 셔플, python을 사용하여 어레이 항목 순서 랜덤화

파이썬을 사용하여 어레이를 셔플하는 가장 쉬운 방법은 무엇입니까?

import random
random.shuffle(array)
import random
random.shuffle(array)

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'는 재현 가능한 동작을 위해 셔플링을 제어할 수 있습니다.

다른 답변이 가장 쉬운데 이 답변이 좀 짜증나네요.random.shuffle메서드는 실제로 아무것도 반환하지 않고 지정된 목록을 정렬할 뿐입니다.콜을 체인으로 하는 경우, 또는 쉐이프 배열을 1 회선으로 선언할 수 있는 경우는, 다음의 조작을 실행할 수 있습니다.

    import random
    def my_shuffle(array):
        random.shuffle(array)
        return array

그런 다음 다음과 같은 행을 수행할 수 있습니다.

    for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):

새로운 어레이를 원하는 경우 사용 가능sample:

import random
new_array = random.sample( array, len(array) )

일반 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는 어레이를 인플레이스(in-place)로 shuffing합니다.

임의의 키를 사용하여 어레이를 정렬할 수 있습니다.

sorted(array, key = lambda x: random.random())

키는 한 번만 읽을 수 있으므로 정렬 중 항목 비교는 여전히 유효합니다.

하지만 처럼 보인다.random.shuffle(array)C로 쓰여있기 때문에 더 빠를 것이다.

이것은 O(log(N) btw입니다.

이전 답변과 더불어 다른 기능을 소개하고 싶습니다.

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]

주의해 주세요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))10(예상대로)을 얻을 수 있는 교환 후np.random.shuffle()5개 정도만 사용할 수 있습니다.random.shuffle().

언급URL : https://stackoverflow.com/questions/473973/shuffle-an-array-with-python-randomize-array-item-order-with-python

반응형