La collecte des résultats à partir d'une boucle qui renvoie les Tableaux NumPy
Je suis certes assez basique Python programmeur, en essayant d'apprendre que je rencontre des problèmes de mise en œuvre de divers problèmes de recherche. Et j'ai frappé l'un de ces problèmes - en particulier, comment gérer les boucles d'où je suis de retour un tas de données, plutôt que l'habituel "sort un numéro unique" des exemples où vous venez d'ajouter le résultat de la boucle tout l'antérieur.
Voici un Résumé de la non bouclés script que je suis en train de lancer: https://gist.github.com/1390355
Vraiment le point saillant est la fin de la model_solve fonction:
def model_solve(t):
# lots of variables set
params = np.zeroes((n_steps,n_params)
params[:,0] = beta
params[:,1] = gamma
timer = np.arange(n_steps).reshape(n_steps,1)
SIR = spi.odeint(eq_system, startPop, t_interval)
output = np.hstack((timer,SIR,params))
return output
Qui renvoie les résultats de l'ODE intégration bits (spi.odeint
) avec un simple "Ce pas de temps sommes-nous?" timer et essentiellement de deux colonnes de la valeur de deux variables aléatoires répétées de nombreuses fois, sous la forme de 4950 ligne et colonne 7 tableau NumPy.
Le but est d'exécuter une analyse Monte-Carlo des deux paramètres (bêta et gamma), qui ont des valeurs aléatoires. Essentiellement, je veux faire une fonction qui boucle un peu comme ceci:
def loop_function(runs):
for i in range(runs):
model_solve(100)
# output of those model_solves collected here
# return collected output
Qui a recueilli la sortie serait alors être écrites dans un fichier. Normalement, je venais d'avoir chaque model_solve fonction écrire ses résultats dans un fichier, mais ce code doit être exécuté sur PiCloud ou une autre plate-forme où je n'ai pas forcément la possibilité d'écrire un fichier jusqu'à ce que les résultats sont retournés à la machine locale. Au lieu de cela, je vais essayer d'obtenir un retour d'un énorme tableau NumPy de runs
*7 colonnes et 4950 lignes - qui peuvent être écrites dans un fichier sur ma machine locale.
Des indices quant à la façon de cette approche?
Comment prendre de nombreux tableaux numpy retourné par une fonction Python et de les combiner en un seul tableau.
OriginalL'auteur Fomite | 2011-11-24
Vous devez vous connecter pour publier un commentaire.
utiliser une liste pour enregistrer tous les résultats:
puis obtenir le tableau de sortie par:
OriginalL'auteur HYRY
En fait, si votre code est d'avoir une beaucoup plus grande boucle, vous devriez toujours essayer de les vectoriser votre problème.
Si la vitesse est importante, vous devriez savoir que "pour les boucles" sont un goulot de bouteille. Aussi, l'opération d'ajout est très lente et exige plus de mémoire, parce qu'il crée des copies. Ainsi, une meilleure solution doit être:
En plus de l'aide de la liste, vous pouvez également utiliser directement un tableau pour stocker vos résultats:
J'espère que ma réponse va vous aider à écrire plus vite et plus claire code
OriginalL'auteur Oz123