• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

wektoryzacja rozkładu multinomial w pythonie

Object Storage Arubacloud
+1 głos
125 wizyt
pytanie zadane 15 lutego 2023 w Python przez zibiken Początkujący (310 p.)

Cześć, zastanawiam się, czy istnieje jakiś sposób na wektoryzację funkcji np.random.multinomial albo torch.multinomial w taki sposób by nie przyjmowały liczby prób i wektora prawdopodobieństw, tylko wektor ilości prób i macierz prawdopodobieństw, co sprawi, że każde generowanie będzie posiadać inne parametry (w przeciwieństwie do parametru size, który tylko powiela ten sam eksperyment). 

Kod pokazujący dokładnie o co chodzi:

import numpy as np

# dummy data for testing
tries = np.random.randint(1000, 10000, size=1000)
probs = np.random.rand(1000, 3)
probs /= probs.sum(axis=1, keepdims=True)

# output array
output = np.zeros((1000, 3), dtype=int)

# TODO vectorize this loop 
for i in range(len(tries)):
    output[i, :] = np.random.multinomial(tries[i], probs[i])

Na internecie znalazłem jedynie coś takiego https://stackoverflow.com/questions/36952419/vectorizing-numpy-random-multinomial. Niestety tutaj problem jest zredukowany do jednej próby czyli defacto losowego wyboru z różnymi prawdopodobieństwami dla elementów.

Zastanawiam się czy istnieje jakiś mądry sposób, który niekoniecznie korzysta z funkcji np.random.multinomial, ale pozwala na znaczące przyśpieszenie takiego eksperymentu poprzez pozbycie się pętli.

1 odpowiedź

+2 głosów
odpowiedź 15 lutego 2023 przez zibiken Początkujący (310 p.)

Znalazłem odpowiedź na to pytanie. Zdecydowałem się odpowiedzieć zamiast usuwać, jeśli komuś się przyda (jakkolwiek nie byłoby to mało prawdopodobne).

tries = np.random.randint(1000, 10000, size=1000)
probs = np.random.rand(1000, 3)
probs /= probs.sum(axis=1, keepdims=True)

# vectorized version
rng = np.random.default_rng()
output = rng.multinomial(tries, probs)

Z pomiarów %timeit wynika, że to rozwiązanie jest ponad 10 razy szybsze.

Podobne pytania

0 głosów
3 odpowiedzi 624 wizyt
pytanie zadane 10 września 2021 w Python przez thesolitaryofchoice Początkujący (490 p.)
0 głosów
0 odpowiedzi 244 wizyt
pytanie zadane 10 marca 2021 w Python przez cba Użytkownik (620 p.)
0 głosów
1 odpowiedź 86 wizyt
pytanie zadane 21 października 2020 w Python przez poldeeek Mądrala (5,980 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...