Generator de numere
  [ Ignoră ]
RankRankRank
Member
Din: bucuresti
Macuser din: 01.11.06

Salut! Se pricepe cineva la generatoare de numere?
M-ar interesa un program care sa genereze un nr. specificat de numere pornind de la media aritmetica a lor si setand limitele sirului. Ex: Sa se genereze 100 de numere cu medie aritmetica 42 avand valorile cuprinse intre 20 si 67.
Eventual sa se poate seta si distributia lor: gausiana sau nu.
Multumesc!

Profil
 
  [ Ignoră ]   [ # 1 ]
Avatar
RankRankRankRank
Administrator
Din: London, UK
Macuser din: 11.10.05

poti sa faci asta in excel
=20+rand()*47
repeti in 100 de celule, faci media si dai enter pana iti e fff aproape de 42. Cand ai ce-ti trebuie dai copy la cele 100 de celule si apoi paste as values.

daca vrei gausian, in loc de rand() pune NORMDIST((-1+2*rand()),0,1,1)
trebuie testata formula, e tarziu acum si astea nu ies niciodata din prima.

Majoritatea programelor statistice au Random Number Generator (e.g. SPSS) dar intotdeauna prefer sa ma joc eu cu numerele cand manaresc niste varste, de exemplu… wink

 Semnătură 

MB12 early2015, mini late2018, i2, i4S, iX, Watch Nike (Series3), iPad 1, iPad Pro 9.7”,  Pencil, shuffle 4, TV4, AExtreme x2, AEBSv2, AEBS original(x2) v1(x2), Homepod (x2), iPod Hi-Fi (x3)

Profil
 
  [ Ignoră ]   [ # 2 ]
Avatar
RankRankRankRank
Administrator
Din: London, UK
Macuser din: 11.10.05

P.S. Indiferent ce vrei sa manaresti, nu e asa de simplu pe cat pare. De exemplu, daca sunt varste numerele alea, ar trebui media si dispersia sa fie normal distribuite din populatia pe care vrei sa o emulezi si nu pe mijlocul intervalului cu SD = cu unitatea, cum e functia normala clasica.
In al doilea rand, pupulatiile nu sunt niciodata normale propriuzis, majoritatea sunt skewed sau mai inalte/tesite. Plus ca nu sunt niciodata perfecte, exista imperfectiuni, coloane lipsa, anomalii punctiforme, exista biasuri de notare (de exemplu femeile o sa aiba distributia zigzagata pe cifre rotunde, la fel si batranii). Daca cel care ti se uita peste date stie ce face, o sa vada de la distanta ca e manarie. Nu vreau sa ma laud, dar datele astea se vad cum vedea Mouse obiecte si oameni in The Matrix. Intotdeauna vezi cand e ceva prea perfect. Vine cu exerienta, but once you see it you cannot unsee it…

Daca vrei sa inventezi data, primul sfat e sa nu. Al doilea e sa cumperi niste hartie milimetrica, sa iti desenezi singur distributia si apoi sa masori milimetrii si sa pui valori. Nu stiu daca ma fac inteles. Functia random nu sunt e mai buna cale, dar e cea mai comoda.

Daca e doar un proiect de statistica, atunci n-ar trebui sa folosesti un program, Excel e perfect. Joaca-te cu functiile pana iti iese.

 Semnătură 

MB12 early2015, mini late2018, i2, i4S, iX, Watch Nike (Series3), iPad 1, iPad Pro 9.7”,  Pencil, shuffle 4, TV4, AExtreme x2, AEBSv2, AEBS original(x2) v1(x2), Homepod (x2), iPod Hi-Fi (x3)

Profil
 
  [ Ignoră ]   [ # 3 ]
Avatar
RankRankRank
Member
Din: Bucuresti
Macuser din: 11.10.05
cristi:~ diciupython
Python 2.6.1 
(r261:67515Jul  7 200923:51:51
[GCC 4.2.1 (Apple Incbuild 5646)] on darwin
Type 
"help""copyright""credits" or "license" for more information.
>>> 
import random
>>> def generator(low=20high=67count=100avg=42):
...         
L=[]
...         while 1:
...                 
sum=reduce(lambda x,y:x+yL0)
...                 
rnd random.randrange(lowhigh+1)
...                 if 
sum rnd avg*count:
...                         
L.append(rnd)
...                 else:
...                         
L.append(avg*count sum)
...                         break
...         return 
L
... 
>>> 
generator()
[264453645762226324394126223151225720296224382660502345,
 
372143434065533834462149435351392045404563232526352339
322747633835503745554429513551524566386232235954386462
42265459483228275650404456605262303821] 
Profil
 
  [ Ignoră ]   [ # 4 ]
Avatar
RankRankRank
Member
Din: Bucuresti
Macuser din: 11.10.05

Later edit ca nu mai merge butonul - nu are gauss si are un bug - nu genereaza fix 100 de numere.

Profil
 
  [ Ignoră ]   [ # 5 ]
Avatar
RankRankRank
Member
Din: Bucuresti
Macuser din: 11.10.05

Asta pare sa mearga - are neajunsul ca rezolva media umbland doar la inceputul seriei.

import random
def sum
(L):
        return 
reduce(lambda x,y:x+y,L)

def generator(low=20high=67count=100avg=42):
        
L=[]
        
while 1:
                
rnd random.randrange(lowhigh+1)
                
L.append(rnd)
                if 
sum(L) > avg*count:
                        break
        
# fix overshoot
        
for i in range(0sum(L) - avg*count):
                
L[i] L[i] 1
        
# too many elements
        
while len(L) > count:
                
diff L.pop(0)
                for 
i in range(0diff):
                        
L[i] L[i] 1
        
# too few elements
        
while len(L) < count:
                
newelem random.randrange(lowhigh+1)
                for 
i in range(0newelem):
                        
L[i] L[i] 1
                L
.append(newelem)
        return 
Profil
 
  [ Ignoră ]   [ # 6 ]
RankRankRank
Member
Din: bucuresti
Macuser din: 01.11.06

multumesc huk si diciu…..dar cautam ceva ce pot folosi mai usor .....uite aici un exemplu dar care nu merge decat daca ai media si Sd-ul:
http://www.random.org/gaussian-distributions/
Huk…o sa-ti trimit un MP…

Liviu

Profil
 
  [ Ignoră ]   [ # 7 ]
Avatar
RankRankRank
Member
Din: Cluj-Napoca
Macuser din: 27.10.08

Apropo de numere aleatoare: http://random.irb.hr/

 Semnătură 

We spent a lot of time in simulators, we were going to do it right  Wally Schirra

Profil