2012-07-24 15 views

Respuesta

21

Para crear una matriz de N por M de iid aleatoria normal variables escriba esto:

matrix(rnorm(N*M,mean=0,sd=1), N, M) 

ajustar la media y el estándar d desviación como se desee.

+0

Mientras el interlocutor entienda que N es el número de filas y M el número de columnas, entonces estará bien atendido por esta respuesta –

+0

@DWin, de acuerdo. Esa es la notación convencional cuando se refiere a matrices en cualquier contexto, ¿verdad? – Macro

+0

No estoy muy seguro. Sé que la gente a veces expresa sorpresa por el hecho de que las matrices de R se llenan en orden de columna mayor con llamadas a 'matriz' a menos que byrow = TRUE. Eso me hizo pensar que podría haber una variación en las convenciones matriciales en varios idiomas. –

2

let mu ser un vector de medios y sigma un vector de desarrolladores estándar

mu<-1:10 
sigma<-10:1 
sample.size<-100 
norm.mat<-mapply(function(x,y){rnorm(x,y,n=sample.size)},x=mu,y=sigma) 

produciría una matriz con columnas que sostiene las muestras pertinentes

+0

Gracias, eso funciona. La solución de @cardenal es mucho más simple. –

-2

Aviso: cada entrada es independiente. Por lo tanto, no puede evitar el uso de bucles for, ya que debe llamar a rnorm una vez para cada variable independiente. Si simplemente llama a rnorm (n * m) ¡esa es la n * m muestras de la misma variable aleatoria!

+0

esto es incorrecto, y confuso ... 'rnorm (n * m)' * does * generate 'n * m' ** muestras ** al azar, exactamente como solicitó el OP. –

1

que puede utilizar:

replicate(NumbOfColumns,rnorm(NumbOfLines)) 

Puede reemplazar rnorm con otras funciones de distribución, por ejemplo runif, para generar matrices con otras distribuciones.

Cuestiones relacionadas