Initialiser les données sur plusieurs colonnes à la foisJe souhaite initialiser les données sur plusieurs colonnes de la même manière en même temps.Par exemple, je souhaite créer un nombre M de colonnes avec des données aléatoires-normales (moyenne = x, stdev = y), sur N lignes.Toute aide est appréciée.Merci.
Ingénierie Qualité et ProcédésRe : Initialiser les données sur plusieurs colonnes à la foisLe temps supplémentaire est consacré à rechercher les valeurs de x et y 999 999 fois supplémentaires, et non à la multiplication proprement dite qui doit être effectuée de toute façon. Vous pouvez utiliser des nombres à la place de x, y et obtenir un temps intermédiaire car le nombre est évalué sans recherche dans l'espace de noms. Le cas de référence ci-dessous n'inclut pas la multiplication et l'addition, ce qui donnerait probablement une réponse plus proche des 3/4 que vous avez décrits.
q=j(size,size,randomnormal()); // 1.0
q=j(size,size,randomnormal(0,1)); // 1.1
q=j(size,size,randomnormal(x,y)); // 1.4
Re : Initialiser les données sur plusieurs colonnes à la foisVoici une chose amusante :
Vous pourriez gagner un peu de temps en utilisant
y * J ( M, N, aléatoireNormal () ) + x
au lieu de
J( M, N, aléatoirenormal (x, y) ).
La raison est que la fonction J est en réalité une boucle...ainsi dans l'exemple J( M, N, randomnormal (x, y) ), à chaque fois dans la boucle, une normale aléatoire standard est choisie, multipliée par y et ajoutée à x pour produire un N(x, y) aléatoire.
Dans l'exemple y * J ( M, N, randomNormal () ) + x, toutes les normales aléatoires standard sont générées, puis la matrice entière est multipliée par y et ajoutée à une matrice x dimensionnellement similaire.
Ce n'est pas une énorme différence, mais dans les matrices 1 000 x 1 000 sur lesquelles j'étudiais, la deuxième approche s'est déroulée environ 3/4 fois plus longtemps que la première.
Re : Initialiser les données sur plusieurs colonnes à la foisEn plus de ce que Mark a fourni : Random Normal ( ) peut être utilisé sans arguments, ou avec 2 arguments.
Sans arguments, vous obtenez N (mean == 0, stddev == 1) données. Le code de Mark vous donnera donc une table MxN de données N(0,1).
En utilisant des arguments, Random Normal ( x, y ) vous donne N (mean == x, stddev == y) données.
Puisque votre message mentionne une moyenne de x et un stddev de y, vous pouvez utiliser ce qui suit, si x n'est pas 0 et/ou y n'est pas 1.
As Table ( J ( N, M, Random Normal ( x, y ) );
Re : Initialiser les données sur plusieurs colonnes à la foisBasé sur les informations limitées fournies, ce script prouve le concept.
Names Default to Here( 1 );
M = 10;
N = 30;
data = J( N, M, Random Normal() );
As Table( data );