• 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

VPS Starter Arubacloud
+1 głos
121 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 569 wizyt
pytanie zadane 10 września 2021 w Python przez thesolitaryofchoice Początkujący (490 p.)
0 głosów
0 odpowiedzi 232 wizyt
pytanie zadane 10 marca 2021 w Python przez cba Użytkownik (620 p.)
0 głosów
1 odpowiedź 82 wizyt
pytanie zadane 21 października 2020 w Python przez poldeeek Mądrala (5,980 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...