Foro de debate

Creación de muchas matrices a partir de dos columnas

Creación de muchas matrices a partir de dos columnas

de Rafael Jarrín Moreno -
Número de respuestas: 3

Hola buenas, quería saber cómo hacer lo siguiente, voy a ser muy claro:

Tengo la siguiente base de datos de 2 columnas con 10.000 datos en cada una (pongo el ejemplo con 3 datos en cada columna.

X                      Y

1                       3 

2                       4

6                       9

Necesito a partir de esas dos columnas hacer matrices diagonales quedando de la siguiente manera las matrices:

1ª Matriz

(1        0

0         3)

2ª Matriz

(2        0

0         4)

3ª Matriz

(6        0

0         9)

y así sucesivamente para los 10.000 datos de cada columna.

¿Existe alguna estructura de bucle o loop que lo permita hacer? Que te de un objeto con las 10.000 matrices que surgirían.

En respuesta a Rafael Jarrín Moreno

Re: Creación de muchas matrices a partir de dos columnas

de David Elías -

Hola!!!!
No sé que tanto sabes de R...
Pero aquí tenés lo que estás buscando.
Copia el siguiente script tal cual está...

Que lo disfrutes!!!!
David Elias


# # # GENERACION DE MATRICES # # #

# Numeros que tendrá en cuenta para generar datos...
# Por ejemplo... numeros enteros del 1 al 10.
NUMEROS <- c(1:10)

# Un objeto que tiene dos columnas...
# La 1er columna sera el 1er elemento diagonal
# La 2da columna sera el 2do elemento diagonal
DIAGONALES <- matrix(NA, 10000,2)

# Un bicle for... para las 10mil filas de "DIAGONALES".
# Toma al azar 2 numeros del objeto "NUMEROS"...
# Con el argumento replace=T da la posibilidad que un numero pueda ser
# parte de los dos elementos de la diagonal...
# Si se cambia la "T" por un "F"... los elementos de la diagonal seran diferentes...
for (n in 1:nrow(DIAGONALES)) DIAGONALES[n,] <- sample(NUMEROS, 2, replace=T)


# Cree el objeto DIAGONALES, por que no tenia datos..:
# Si vos ya tenes una matriz con numeros que queres usar...
# podes utilizar esa informacion en vez de este objeto...

# Creamos una lista que contedra las 10mil matrices con las diagonales que se sortearon
MATRICES_SALIDA <- list()

# Creamos un bucle for de nuevo...
for (k in 1:nrow(DIAGONALES)) {
 
 
  # Generamos una matriz de 2 por 2, con todos ceros...
  MATRICES_SALIDA[[k]] <- matrix(0,2,2)
 
  # Le modificamos el elemento de la posicion 1,1
  MATRICES_SALIDA[[k]][1,1] <- DIAGONALES[k,1]
 
  # Le modificamos el elemento de la posicion 2,2
  MATRICES_SALIDA[[k]][2,2] <- DIAGONALES[k,2]
 
} # Fin for k


# Visualizacion de las matrices generadas...
  MATRICES_SALIDA
 
 
 
# QUE LO DISFRUTESSSSSSSS!!!!!!!!!!! 
# David Elias 
 

En respuesta a David Elías

Re: Creación de muchas matrices a partir de dos columnas

de Manuel Muñoz Márquez -

Buenas:

¿Qué tal un array tridimensional?

x <- c(1,2,6)

y <- c(3,4,9)

m <- rep(0, 40000)

dim(m) <- c(2, 2, 10000)

for(i in 1:10000) m[,, i] <- diag(c(x[i], y[i]))


Para quedarte con la matriz 3, por ejemplo, haces m[,,3]


Un saludo.