스택큐힙리스트

두 개의 넘파이 어레이를 동시에 섞는 더 나은 방법 본문

카테고리 없음

두 개의 넘파이 어레이를 동시에 섞는 더 나은 방법

스택큐힙리스트 2023. 4. 28. 05:59
반응형

나는 길이가 같지만 모양이 다른 두 개의 numpy 배열을 가지고 있습니다. 나는 각각을 섞고 싶습니다. 그리고 대응하는 요소는 계속 대응하도록 -- 즉, 선도 길이에 대해 조화롭게 섞어야합니다.

이 코드는 작동하며, 나의 목표를 보여줍니다.

def shuffle_in_unison(a, b):

assert len(a) == len(b)

shuffled_a = numpy.empty(a.shape, dtype=a.dtype)

shuffled_b = numpy.empty(b.shape, dtype=b.dtype)

permutation = numpy.random.permutation(len(a))

for old_index, new_index in enumerate(permutation):

shuffled_a[new_index] = a[old_index]

shuffled_b[new_index] = b[old_index]

return shuffled_a, shuffled_b

예를 들어:

>>> a = numpy.asarray([[1, 1], [2, 2], [3, 3]])

>>> b = numpy.asarray([1, 2, 3])

>>> shuffle_in_unison(a, b)

(array([[2, 2],

[1, 1],

[3, 3]]), array([2, 1, 3]))

그러나 이것은 조잡하고 비효율적이며 느리게 느껴지며 배열을 복사해야하는 요구사항이 있습니다. 그러므로 배열이 매우 크기 때문에 제자리에서 섞어주는 것이 더 좋습니다.

이것을 처리하는 더 나은 방법이 있을까요? 빠른 실행과 낮은 메모리 사용량이 제 주된 목표이지만, 우아한 코드도 좋겠습니다.

내가 떠오른 또 다른 생각은 이것입니다:

def shuffle_in_unison_scary(a, b):

rng_state = numpy.random.get_state()

numpy.random.shuffle(a)

numpy.random.set_state(rng_state)

numpy.random.shuffle(b)

이것은 작동하지만 조금 무서워요. 예를 들면, numpy 버전을 넘어서 유지될 것이 보장되는 것처럼 보이지 않기 때문입니다.

답변 1

넘파이의 array indexing을 사용할 수 있습니다.

def unison_shuffled_copies(a, b):

assert len(a) == len(b)

p = numpy.random.permutation(len(a))

return a[p], b[p]

이것은 별도의 유니 셔플된 배열을 생성하는 결과를 가져올 것입니다.

답변 2

Note: The following is a machine translation and may contain errors or awkward language.

numpy 배열을 동기화하여 섞는 더 나은 방법

파이썬 numpy 패키지는 높은 수준의 수치 연산을 지원하는 강력한 라이브러리입니다.합성곱 신경망, 선형 대수, 표 및 그래프 분석 등에 사용됩니다.이 라이브러리는 혁신적인 기능과 기능이 많아 데이터 분석 및 처리를 위해 유용합니다.그러나 때로는 두 개의 배열이 동시에 섞이기를 원합니다.이 때 우리는 다음과 같은 더 나은 방법을 사용할 수 있습니다.

기존 방법

기존에는 먼저 배열을 다른 무작위 배열에 대한 인덱스를 무작위로 생성하고 이 인덱스를 사용하여 새로운 배열을 만듭니다.그러나이 방법은 메모리가 많이 사용되며 수행 시간이 느릴 수 있습니다.

새로운 방법

더 나은 방법은 인덱스를 함께 섞고이를 사용하여 두 배열을 섞는 것입니다.이 방법은 기존 방법보다 더 효율적이며 메모리 사용량이 적습니다.

다음은 이번 방법의 예입니다.

import numpy as np

x = np.array([1,2,3,4,5])

y = np.array([6,7,8,9,10])

p = np.random.permutation(len(x))

x_shuffled = x[p]

y_shuffled = y[p]

이 메소드는 두 numpy 배열 (x 및 y)을 가져와 각각의 길이 (p)에 대한 순열을 생성합니다.그런 다음 numpy의 순열 메소드 인 permutation을 사용하여 섞인 인덱스의 배열을 만듭니다.이것은 x 및 y 배열을 동시에 섞은 배열입니다.

이제이 메소드로 두 개의 배열을 더욱 쉽고 빠르게 섞을 수 있습니다.

반응형
Comments