Vinnaren i pepparkakshustävlingen!
2022-07-05, 09:26
  #1
Medlem
Hej, jag sitter och försöker skicka tal-värde input(en sannolikhet till en funktion som använder ramdom.choice för att generera en sannolikhet baserat på min input.
Dock får jag samma värde tillbaka hela tiden oavsett hur jag varierar min input sannolikhet p.
Talet som ska beräknas är tal och jag gör som detta(pseudokod):
Kod:
mitt_p= (något tal jag hittar på mellan 0.1 till 0.9)
lista_events=[0,1,2,3,4,5]
lista_av sannolikheter=[0.0296,0.1665,0.3427,0.2987,0.1275,0.035]

tal=tal+np.random.choice(lista_events,mitt_p=lista_sannolikheter)

print(tal)
Talet som genereras verkar dock inte påverkas av vad jag skickar till random.choice
Enligts syntaxmanualen av random.choice ska jag väl kunna förse den med ett av mig givet
sannolikhet också förutom en lista av sannolikheter och en lista av events som redan är definierad?
Kod:
syntax numpy.random.choice( list , size = None, replace = True, p = None)
Kanske dåligt förklarat men jag vill altså undersöka hur mitt val av variabeln mitt_p påverkar den beräknade sannolikheten som random.choice utför. Kanske måste multiplicera
tal med mitt_p istället ?
Citera
2022-07-05, 09:37
  #2
Medlem
vtcs avatar
Här ligger ett problem:
Kod:
tal=tal+np.random.choice(lista_events,mitt_p=lista_sannolikheter)
numpy.random.choice tar inte emot en parameter som heter mitt_p - det ska vara p

Se dokumentationen: https://numpy.org/doc/stable/referen...om.choice.html
Citera
2022-07-05, 09:51
  #3
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av janblommgren
Hej, jag sitter och försöker skicka tal-värde input(en sannolikhet till en funktion som använder ramdom.choice för att generera en sannolikhet baserat på min input.
Dock får jag samma värde tillbaka hela tiden oavsett hur jag varierar min input sannolikhet p.
Talet som ska beräknas är tal och jag gör som detta(pseudokod):
Kod:
mitt_p= (något tal jag hittar på mellan 0.1 till 0.9)
lista_events=[0,1,2,3,4,5]
lista_av sannolikheter=[0.0296,0.1665,0.3427,0.2987,0.1275,0.035]

tal=tal+np.random.choice(lista_events,mitt_p=lista_sannolikheter)

print(tal)
Talet som genereras verkar dock inte påverkas av vad jag skickar till random.choice
Enligts syntaxmanualen av random.choice ska jag väl kunna förse den med ett av mig givet
sannolikhet också förutom en lista av sannolikheter och en lista av events som redan är definierad?
Kod:
syntax numpy.random.choice( list , size = None, replace = True, p = None)
Kanske dåligt förklarat men jag vill altså undersöka hur mitt val av variabeln mitt_p påverkar den beräknade sannolikheten som random.choice utför. Kanske måste multiplicera
tal med mitt_p istället ?

Du har fler syntaxfel i din kod som gör att den inte går att köra. Ditt problem är väl att värdena i listan som anges p i random.choice ska summera till 1.

Här är vad jag tror du försöker göra, men som sagt så blir det ett fel eftersom p inte summerar till 1.

Kod:
import numpy as np

mitt_p
=0.4
tal
=0
lista_events
=[0,1,2,3,4,5]
lista_av_sannolikheter=[0.0296,0.1665,0.3427,0.2987,0.1275,0.035]
mina_sannolikheter=list(map(lambda x:x*mitt_p,lista_av_sannolikheter))

tal=tal+np.random.choice(lista_events,p=mina_sannolikheter)

print(
tal

Output:
Citat:
ValueError: probabilities do not sum to 1

Fortsatt läsning:
https://stackoverflow.com/questions/...o-not-sum-to-1
__________________
Senast redigerad av Enterprise 2022-07-05 kl. 09:55.
Citera
2022-07-05, 10:06
  #4
Medlem
Citat:
Ursprungligen postat av janblommgren
Hej, jag sitter och försöker skicka tal-värde input(en sannolikhet till en funktion som använder ramdom.choice för att generera en sannolikhet baserat på min input.
Dock får jag samma värde tillbaka hela tiden oavsett hur jag varierar min input sannolikhet p.
Talet som ska beräknas är tal och jag gör som detta(pseudokod):
Kod:
mitt_p= (något tal jag hittar på mellan 0.1 till 0.9)
lista_events=[0,1,2,3,4,5]
lista_av sannolikheter=[0.0296,0.1665,0.3427,0.2987,0.1275,0.035]

tal=tal+np.random.choice(lista_events,mitt_p=lista_sannolikheter)

print(tal)
Talet som genereras verkar dock inte påverkas av vad jag skickar till random.choice
Enligts syntaxmanualen av random.choice ska jag väl kunna förse den med ett av mig givet
sannolikhet också förutom en lista av sannolikheter och en lista av events som redan är definierad?
Kod:
syntax numpy.random.choice( list , size = None, replace = True, p = None)
Kanske dåligt förklarat men jag vill altså undersöka hur mitt val av variabeln mitt_p påverkar den beräknade sannolikheten som random.choice utför. Kanske måste multiplicera
tal med mitt_p istället ?

Läs manualen igen. Din variabel mitt_p är meningslös och du använder fel keyword när du skickar in listan med sannolikheter. Det ska vara 'p='. Du borde få felmeddelande med den koden.


Edit: Sen på pucken Du har fått svar redan.
__________________
Senast redigerad av alamos 2022-07-05 kl. 10:08.
Citera
2022-07-05, 11:50
  #5
Medlem
Citat:
Ursprungligen postat av Enterprise
Du har fler syntaxfel i din kod som gör att den inte går att köra. Ditt problem är väl att värdena i listan som anges p i random.choice ska summera till 1.

Här är vad jag tror du försöker göra, men som sagt så blir det ett fel eftersom p inte summerar till 1.

Kod:
import numpy as np

mitt_p
=0.4
tal
=0
lista_events
=[0,1,2,3,4,5]
lista_av_sannolikheter=[0.0296,0.1665,0.3427,0.2987,0.1275,0.035]
mina_sannolikheter=list(map(lambda x:x*mitt_p,lista_av_sannolikheter))

tal=tal+np.random.choice(lista_events,p=mina_sannolikheter)

print(
tal

Output:


Fortsatt läsning:
https://stackoverflow.com/questions/...o-not-sum-to-1
Hm-ja och då jag testar ditt förslag som jag tror är rätt väg att gå så får jag valuerror som du påpekade.

Jag är ute efter att gradvis kunna testa mitt_p parametern så jag ser hur parametern tal ändras då jag varierar mitt_p i intervallet mellan 0.1 till 0.9.
Har testat att istället ändra från multiplication till addition i
mina_sannolikheter=list(map(lambda x:x*mitt_p,lista_av_sannolikheter)) men får samma valuerror.
Dvs jag testade :
Kod:
mina_sannolikheter=list(map(lambda x:x+mitt_p,lista_av_sannolikheter)) 
Citera
2022-07-05, 13:12
  #6
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av janblommgren
Hm-ja och då jag testar ditt förslag som jag tror är rätt väg att gå så får jag valuerror som du påpekade.

Jag är ute efter att gradvis kunna testa mitt_p parametern så jag ser hur parametern tal ändras då jag varierar mitt_p i intervallet mellan 0.1 till 0.9.
Har testat att istället ändra från multiplication till addition i
mina_sannolikheter=list(map(lambda x:x*mitt_p,lista_av_sannolikheter)) men får samma valuerror.
Dvs jag testade :
Kod:
mina_sannolikheter=list(map(lambda x:x+mitt_p,lista_av_sannolikheter)) 
Men är det inte ett tankefel att multiplicera alla sannolikheter med mitt_p?
Då blir ju den inbördes fördelningen mellan alternativen oförändrad.

Såg nu att du ändrade till addition. Du måste se till att listan summerar till 1, typ:

Kod:
import numpy as np

mitt_p
=0.4
tal
=0
lista_events
=[0,1,2,3,4,5]
lista_av_sannolikheter=[0.0296,0.1665,0.3427,0.2987,0.1275,0.035]
mina_sannolikheter=list(map(lambda x:x+mitt_p,lista_av_sannolikheter))

nylista=[]
nysumma=sum(mina_sannolikheter)

for 
s in mina_sannolikheter:
    
nylista.append(s/nysumma)

print(
nylista)    
tal=tal+np.random.choice(lista_events,p=nylista)

print(
tal
__________________
Senast redigerad av Enterprise 2022-07-05 kl. 13:18.
Citera
2022-07-05, 13:51
  #7
Medlem
Jag förstår inte vad som ska åstadkommas men problemet är väl att listan av sannolikheter inte summeras till 1 på grund av avrundningseffekter.

Följande kod bör vara körbar åtminstone:

Kod:
import numpy as np

tal
=0
lista_events
=[0,1,2,3,4,5]
lista_av_sannolikheter=[0.0296,0.1665,0.3427,0.2987,0.1275,0.035]
lista_av_sannolikheter=np.asarray(lista_av_sannolikheter).astype('float64')

tal=tal+np.random.choice(lista_events,p=lista_av_sannolikheter)

print(
tal
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback