답변:
>>> A = np.random.randint(5, size=(10,3))
>>> A
array([[1, 3, 0],
[3, 2, 0],
[0, 2, 1],
[1, 1, 4],
[3, 2, 2],
[0, 1, 0],
[1, 3, 1],
[0, 4, 1],
[2, 4, 2],
[3, 3, 1]])
>>> idx = np.random.randint(10, size=2)
>>> idx
array([7, 6])
>>> A[idx,:]
array([[0, 4, 1],
[1, 3, 1]])
일반적인 경우를 위해 함께 정리 :
A[np.random.randint(A.shape[0], size=2), :]
교체가 아님 (numpy 1.7.0+) :
A[np.random.choice(A.shape[0], 2, replace=False), :]
1.7 이전에 임의의 목록을 교체하지 않고 생성하는 좋은 방법이 없다고 생각합니다. 아마도 두 값이 같지 않도록 작은 정의를 설정할 수 있습니다.
np.random.choice
, 그리고 즉 np.random.permutation(A.shape[0])[:2]
, 실제로 가장 큰 아니지만, 그게 무슨입니다 np.random.choice
이 시간에 ... 또는 당신이 당신의 배열 인 -을 변경할 상관하지 않는 경우 장소np.random.shuffle
이것은 오래된 게시물이지만 이것이 나에게 가장 적합한 것입니다.
A[np.random.choice(A.shape[0], num_rows_2_sample, replace=False)]
replace = False를 True로 변경하여 동일한 것을 가져 오되 교체하십시오.
replace=False
매개 변수가에 표시됩니다 choice
.
또 다른 옵션은 특정 요인으로 데이터를 다운 샘플링하려는 경우 임의 마스크를 만드는 것입니다. 현재 배열에 유지되는 원래 데이터 세트의 25 %로 다운 샘플링하고 싶다고 가정 해보십시오 data_arr
.
# generate random boolean mask the length of data
# use p 0.75 for False and 0.25 for True
mask = numpy.random.choice([False, True], len(data_arr), p=[0.75, 0.25])
이제 data_arr[mask]
무작위로 샘플링 된 행의 ~ 25 %를 호출 하고 반환 할 수 있습니다 .
replace = False
교체 샘플링을 원하지 않는 경우 추가 할 수 있습니다 .
이것은 Hezi Rasheff가 제공 한 것과 비슷한 대답이지만 단순화 된 파이썬 사용자는 무슨 일이 일어나고 있는지 이해합니다 (많은 새로운 데이터 과학 학생들이 파이썬에서 무슨 일을하는지 모르기 때문에 가장 이상한 방식으로 임의의 샘플을 가져 오는 것을 알았습니다).
다음을 사용하여 배열에서 여러 개의 임의 인덱스를 얻을 수 있습니다.
indices = np.random.choice(A.shape[0], amount_of_samples, replace=False)
그런 다음 numpy 배열과 슬라이싱을 사용하여 해당 인덱스에서 샘플을 얻을 수 있습니다.
A[indices]
그러면 데이터에서 지정된 수의 무작위 샘플을 얻을 수 있습니다.
동일한 행이 필요하지만 임의의 샘플 만 필요한 경우,
import random
new_array = random.sample(old_array,x)
여기서 x는 무작위로 선택하려는 행 수를 정의하는 'int'여야합니다.
old_array
numpy 배열이 아닌 시퀀스 또는 세트 인 경우에만 작동합니다. [link] ( docs.python.org/3/library/random.html#functions-for-sequences )
예를 들어 RANSAC를 수행하는 경우와 같이 임의의 행의 여러 하위 집합을 생성하려는 경우.
num_pop = 10
num_samples = 2
pop_in_sample = 3
rows_to_sample = np.random.random([num_pop, 5])
random_numbers = np.random.random([num_samples, num_pop])
samples = np.argsort(random_numbers, axis=1)[:, :pop_in_sample]
# will be shape [num_samples, pop_in_sample, 5]
row_subsets = rows_to_sample[samples, :]