Tengo una matriz (32X48).Convierta una matriz en una matriz de 1 dimensión
¿Cómo puedo convertir la matriz en una única matriz dimensional?
Tengo una matriz (32X48).Convierta una matriz en una matriz de 1 dimensión
¿Cómo puedo convertir la matriz en una única matriz dimensional?
O léalo con 'escanear', o simplemente haga como .vector() en la matriz. Es posible que desee transponer la matriz primero si lo desea por filas o columnas. Las soluciones publicadas hasta ahora son tan brutos que ni siquiera voy a probarlos ...
> m=matrix(1:12,3,4)
> m
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> as.vector(m)
[1] 1 2 3 4 5 6 7 8 9 10 11 12
> as.vector(t(m))
[1] 1 4 7 10 2 5 8 11 3 6 9 12
De ?matrix
: "Una matriz es el caso especial de una 'matriz' bidimensional." Simplemente puede cambiar las dimensiones de la matriz/matriz.
Elts_int <- as.matrix(tmp_int) # read.table returns a data.frame as Brandon noted
dim(Elts_int) <- (maxrow_int*maxcol_int,1)
La tabla de lectura devuelve un data.frame no una matriz. ¿Esto todavía funciona sin as.matrix()? –
@Brandon no, no lo hará; ¡buena atrapada! –
Puede utilizar la solución de Joshua pero creo que necesita Elts_int <- as.matrix(tmp_int)
O para bucles:
z <- 1 ## Initialize
counter <- 1 ## Initialize
for(y in 1:48) { ## Assuming 48 columns otherwise, swap 48 and 32
for (x in 1:32) {
z[counter] <- tmp_int[x,y]
counter <- 1 + counter
}
}
z es un vector 1d.
Si estamos hablando de hoja.de.datos, entonces usted debe preguntarse son las variables del mismo tipo? Si ese es el caso, puede utilizar rapply o no listados, ya data.frames son listas, en lo profundo de sus almas ...
data(mtcars)
unlist(mtcars)
rapply(mtcars, c) # completely stupid and pointless, and slower
'unlist' funcionó para mí. –
array(A)
o array(t(A))
te dará una matriz de 1 d.
simple y rápido desde una matriz 1d es esencialmente un vector
vector <- array[1:length(array)]
Puede ser que sea tan tarde, de todos modos aquí está mi proyecto de convertir la matriz de vectores:
library(gdata)
vector_data<- unmatrix(yourdata,byrow=T))
esperanza de que le ayudará
Si en su lugar tenía un data.frame (df) que tenía varias columnas y desea vectorizar, puede hacer
as.matrix (df, ncol = 1)
Esto también funcionaría para una matriz. –
puede usar as.vector()
. Parece que es el método más rápido de acuerdo con mi pequeño punto de referencia, como sigue:
library(microbenchmark)
x=matrix(runif(1e4),100,100) # generate a 100x100 matrix
microbenchmark(y<-as.vector(x),y<-x[1:length(x)],y<-array(x),y<-c(x),times=1e4)
La primera solución utiliza as.vector()
, la segunda utiliza el hecho de que una matriz se almacena como una matriz contigua en la memoria y length(m)
da la número de elementos en una matriz m
. El tercero instancia un array
de x
, y el cuarto usa la función de concatenación c()
. También probé unmatrix
desde gdata
, pero es demasiado lento para mencionarlo aquí.
Éstos son algunos de los resultados numéricos que obtuve:
> microbenchmark(
y<-as.vector(x),
y<-x[1:length(x)],
y<-array(x),
y<-c(x),
times=1e4)
Unit: microseconds
expr min lq mean median uq max neval
y <- as.vector(x) 8.251 13.1640 29.02656 14.4865 15.7900 69933.707 10000
y <- x[1:length(x)] 59.709 70.8865 97.45981 73.5775 77.0910 75042.933 10000
y <- array(x) 9.940 15.8895 26.24500 17.2330 18.4705 2106.090 10000
y <- c(x) 22.406 33.8815 47.74805 40.7300 45.5955 1622.115 10000
aplanamiento una matriz es una operación común en aprendizaje automático, donde una matriz puede representar los parámetros de aprender, pero uno utiliza un algoritmo de optimización de un genérico biblioteca que espera un vector de parámetros. Por lo tanto, es común transformar la matriz (o matrices) en dicho vector. Es el caso con la función R estándar optim()
.
Esta debería ser la solución aceptada, ya que el título de la pregunta claramente dice que la entrada de matriz – C8H10N4O2
transponiendo la matriz es genio! – LostLin