Puis-je indiquer une numpy dtype lors de la génération de valeurs aléatoires?
Je suis de la création d'un numpy
tableau de valeurs aléatoires et de les ajouter à un groupe existant contenant 32 bits flottant. J'aimerais générer des valeurs aléatoires à l'aide de la même dtype que la matrice cible, de sorte que je n'ai pas à convertir les dtypes manuellement. Actuellement je fais ceci:
import numpy as np
x = np.zeros((10, 10), dtype='f')
x += np.random.randn(*x.shape).astype('f')
Ce que j'aimerais faire à la place de la dernière ligne est quelque chose comme:
x += np.random.randn(*x.shape, dtype=x.dtype)
mais randn
(et en fait, aucun des numpy.random
méthodes) ne pas accepter un dtype
argument.
Mon question est, est-il possible de spécifier une dtype de nombres aléatoires lorsque je les créer, sans avoir à appeler astype
? (Ma conjecture est que le générateur de nombre aléatoire est de 64 bits de long, de sorte qu'il n'a pas vraiment de raison de faire ça, mais j'ai pensé que je voudrais vous demander si c'est possible.)
- numpy convertira automatiquement le type de votre ensemble aléatoire du type de
x
lorsque vous effectuez l'opération sur place, il n'y a absolument pas besoin deastype
, il suffit de fairex += np.random.randn(*x.shape)
, et de voir par vous-même quex.dtype
ne change pas.
Vous devez vous connecter pour publier un commentaire.
Simplement essayer ceci:
Ou de définir une nouvelle fonction comme
Si vous devez utiliser votre code sur le post, essayez ce code au lieu
Cela affecte les résultats de
randn
de la mémoire allouée parnp.zeros
Permettez-moi de commencer en disant que numpy prend désormais en charge dtypes pour les entiers aléatoires. Cette amélioration peut être suivi à travers Question n ° 6790 sur numpy de github. Mais aujourd'hui encore, cette installation n'est pas disponible pour le
gaussian RNG
. J'avais besoin de ce même site, j'ai donc écrit ce patch pour numpy, https://gist.github.com/se4u/e44f631b249e0be03c21c6c898059176Le patch uniquement ajout du support pour générer des
float
valeurs et il ne gère pas les autres types de données, mais il peut toujours être utile à quelqu'un.np.aléatoire.la fonction randn au hasard initialise le tableau objet d'une forme donnée à un "np.float64"
Vous pouvez le découvrir par vous-même en procédant comme suit: