일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 클라우드컴퓨팅
- 자바스크립트
- 딥러닝
- Yes
- 프로그래밍
- 데이터베이스
- 컴퓨터과학
- 컴퓨터비전
- 컴퓨터공학
- 데이터구조
- 파이썬
- 2
- 알고리즘
- 네트워크보안
- 버전관리
- 데이터분석
- 소프트웨어
- 네트워크
- 빅데이터
- 사이버보안
- 코딩
- 소프트웨어공학
- 인공지능
- 보안
- 머신러닝
- 데이터과학
- 웹개발
- 프로그래밍언어
- 자료구조
- I'm Sorry
- Today
- Total
스택큐힙리스트
두 개의 넘파이 어레이를 동시에 섞는 더 나은 방법 본문
나는 길이가 같지만 모양이 다른 두 개의 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 배열을 동시에 섞은 배열입니다.
이제이 메소드로 두 개의 배열을 더욱 쉽고 빠르게 섞을 수 있습니다.