Mam bardzo dużą tablicę 2D, która wygląda mniej więcej tak:
a=
[[a1, b1, c1],
[a2, b2, c2],
...,
[an, bn, cn]]
Używając numpy, czy istnieje łatwy sposób na uzyskanie nowej tablicy 2D z np. 2 losowymi wierszami z początkowej tablicy a
(bez zamiany)?
na przykład
b=
[[a4, b4, c4],
[a99, b99, c99]]
Odpowiedzi:
Składając to razem dla ogólnego przypadku:
W przypadku produktów niewymiennych (numpy 1.7.0+):
Nie wierzę, że istnieje dobry sposób na wygenerowanie losowej listy bez wymiany przed 1.7. Być może możesz ustawić małą definicję, która zapewni, że te dwie wartości nie będą takie same.
źródło
np.random.choice
, i tonp.random.permutation(A.shape[0])[:2]
właściwie nie jest świetny, ale to jest to, conp.random.choice
w tej chwili ... lub jeśli nie chcesz zmieniać swojej tablicy w- miejsce,np.random.shuffle
To jest stary post, ale to działa najlepiej dla mnie:
zmień replace = False na True, aby uzyskać to samo, ale z wymianą.
źródło
replace=False
parametr dochoice
.Inną opcją jest utworzenie losowej maski, jeśli chcesz po prostu zmniejszyć próbkowanie danych o określony czynnik. Powiedzmy, że chcę pobrać próbkowanie do 25% mojego pierwotnego zestawu danych, który jest obecnie przechowywany w tablicy
data_arr
:Teraz możesz wywoływać
data_arr[mask]
i zwracać ~ 25% wierszy, losowo próbkowanych.źródło
replace = False
jeśli nie chcesz próbkowania z wymianą.Jest to odpowiedź podobna do tej, którą dostarczył Hezi Rasheff, ale jest uproszczona, dzięki czemu nowi użytkownicy Pythona rozumieją, co się dzieje (zauważyłem, że wielu nowych studentów nauki danych pobiera losowe próbki w najdziwniejszy sposób, ponieważ nie wiedzą, co robią w Pythonie).
Możesz uzyskać wiele losowych indeksów ze swojej tablicy, używając:
Następnie możesz użyć wycinania z tablicą numpy, aby pobrać próbki w tych indeksach:
Dzięki temu uzyskasz określoną liczbę losowych próbek z Twoich danych.
źródło
Widzę, że zaproponowano permutację. W rzeczywistości można to zrobić w jednej linii:
źródło
Jeśli potrzebujesz tych samych wierszy, ale tylko losowej próbki,
Tutaj x musi być liczbą „int” określającą liczbę wierszy, które chcesz losowo wybrać.
źródło
old_array
jest sekwencją lub zestawem, a nie tablicą numpy [link] ( docs.python.org/3/library/random.html#functions-for-sequences )Jeśli chcesz wygenerować wiele losowych podzbiorów wierszy, na przykład jeśli wykonujesz RANSAC.
źródło