2013-02-12 1 views
2

J'ai essayé de chercher une de ces réponses un peu, et je ne trouve pas ce que je cherche. Je suis sûr que c'est assez basique et que je ne sais pas comment formuler la recherche de ce que je cherche, je vais dans le mauvais sens.retourner des variables aléatoires dans le tableau en fonction de la variable logique ou rééchantillonner la variable dans scipy

En utilisant scipy Je voudrais soit:

définir une variable par une distribution aléatoire et avoir le retour d'une nouvelle valeur à chaque fois qu'il est appelé, par exemple:

x = np.random.normal(30,30/10) 
x = #random number 
x = #new random number 

l'objectif final est pour obtenir ce bit de code (et plusieurs autres similaires) pour retourner des variables aléatoires pour les nombres pour g1 et g2 définis par leur distribution pour chaque emplacement dans le tableau gamma. Je serais heureux de rechercher les valeurs aléatoires dans g1rand et g2rand si cela pouvait fonctionner, mais je n'ai pas été capable de comprendre comment peupler le tableau gamma avec une boucle pour cela non plus. L'objectif final est d'exécuter des simulations MC du code. Merci d'avance.

disc = 11j #number of intervals 
depth = 50 
q = 300 #number of random sampls 
n = depth 
interval_thickness =abs(n/(abs(disc)-1)) 
depth_array = np.r_[0:n:(disc)] 
ld1 = 10.0 
ld2 = 70.0 
g1 = 120 
g1rand = np.random.normal(g1,g1/10,q) 
g2 = 60 
g2rand = np.random.normal(g2,g2/10,q) 
condlist = [depth_array <= 0,depth_array<=ld1, depth_array<=ld2] 
choicelist = [0, g1, g2] 
gamma = np.select(condlist, choicelist) 
interval_weight=interval_thickness*gamma 

Répondre

0

Je ne pense pas que je comprends parfaitement ce que vous essayez de faire dans votre plus morceau de code, mais si vous voulez générer vos échantillons au hasard un par un, vous pouvez utiliser scipy.stats.norm:

>>> import scipy.stats 
>>> x = scipy.stats.norm(loc=30, scale=30/10) # loc is mean, scale is stdev 
>>> x.rvs() # return a single random sample from distribution 
30.0640285320252 
>>> x.rvs() 
29.773804986818252 
>>> x.rvs(5) # returns an array of 5 random samples from distribution 
array([ 31.46684871, 28.5463796 , 30.37591994, 30.50111085, 32.19189648]) 
>>> x.mean() # recover distribution parameters from x 
30.0 
>>> x.std() 
3.0 
+0

Gahhh. Merci! Je pense que ça va le faire. Je savais qu'il devait y avoir quelque chose comme ça et je ne pouvais pas le trouver. – user2060108

+0

Je pensais avoir édité mon commentaire. Ce que je vais faire finalement, c'est d'avoir le tableau gamma au-dessus des variables de retour comme si chaque fois que g1 était le résultat, il s'exécuterait comme un nouveau g1rand.rvs(). même chose pour g2 -> g2rand.rvs. Est-ce mieux accompli en faisant une boucle? – user2060108

Questions connexes