2010-09-29 12 views

Antwort

157

Entweder lesen Sie es mit "Scan", oder einfach als.Vektor() auf der Matrix. Vielleicht möchten Sie die Matrix zuerst transponieren, wenn Sie sie nach Zeilen oder Spalten haben möchten. Die Lösungen geschrieben, so weit so gross ich bin nicht einmal ...

> 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 
+4

Dies sollte die akzeptierte Lösung sein, da der Titel der Frage eindeutig Matrixeingabe – C8H10N4O2

+0

Transponieren der Matrix ist genial! – LostLin

9

Von ?matrix: "Eine Matrix ist der Spezialfall eines zweidimensionalen 'Array'." Sie können einfach die Dimensionen der Matrix/des Arrays ändern.

Elts_int <- as.matrix(tmp_int) # read.table returns a data.frame as Brandon noted 
dim(Elts_int) <- (maxrow_int*maxcol_int,1) 
+1

Lesen Tabelle gibt ein data.frame keine Matrix zurück. Funktioniert das noch ohne as.matrix()? –

+0

@Brandon nein wird es nicht; guter Fang! –

1

können Sie Joshua-Lösung verwenden, aber ich glaube, Sie brauchen Elts_int <- as.matrix(tmp_int)

Oder für Schleifen:

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 ein 1d Vektor ist.

27

versuchen gehen Wenn wir über data.frame sprechen, dann sollten Sie sich fragen, die Variablen des gleichen Typs sind? Wenn das der Fall ist, können Sie rapply oder fehlenden oder, da data.frames Listen sind, tief in ihre Seelen ...

data(mtcars) 
unlist(mtcars) 
rapply(mtcars, c) # completely stupid and pointless, and slower 
+0

'unlist' arbeitete für mich. –

23

versuchen c()

x = matrix(1:9, ncol = 3) 

x 
    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 2 5 8 
[3,] 3 6 9 

c(x) 

[1] 1 2 3 4 5 6 7 8 9 
+0

Das ist ein Vektor und kein 1-d Array. – hadley

+0

hmm. Das ist richtig. Vielleicht kein 1-d-Array, sondern ein 1-d-Vektor. – Greg

10

array(A) oder array(t(A)) geben Ihnen ein 1-d-Array.

1

Einfach und schnell, da ein 1D-Array im Wesentlichen ein Vektor ist

vector <- array[1:length(array)] 
5

Es könnte so spät sein, jedenfalls hier ist meine Art Matrix-Vektor bei der Umwandlung:

library(gdata) 
vector_data<- unmatrix(yourdata,byrow=T)) 

Hoffnung, die hilft

1

Wenn Sie stattdessen einen data.frame (df) mit mehreren Spalten haben und vektorisieren möchten, können Sie

tun

as.matrix (df, ncol = 1)

+0

Dies würde auch für eine Matrix funktionieren. –

1

können Sie as.vector() verwenden. Es sieht aus, als ob es das schnellste Verfahren nach meinem kleinen Maßstab ist, wie folgt:

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) 

Die erste Lösung verwendet as.vector(), verwendet die zweiten die Tatsache, dass eine Matrix als eine zusammenhängende Anordnung im Speicher gespeichert ist, und length(m) gibt die Anzahl der Elemente in einer Matrix m. Der dritte instantiiert einen von x, und der vierte verwendet die Verkettungsfunktion c(). Ich versuchte auch unmatrix von gdata, aber es ist zu langsam, um hier erwähnt zu werden.

Hier sind einige der numerischen Ergebnisse, die ich erhalten:

> 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 

eine Matrix Abflachen ist eine gemeinsame Operation in Machine Learning, wo eine Matrix die Parameter darstellen zu lernen, aber man verwendet einen Optimierungsalgorithmus von einem generischen Bibliothek, die einen Vektor von Parametern erwartet. Daher ist es üblich, die Matrix (oder Matrizen) in einen solchen Vektor zu transformieren. Dies ist bei der Standard-R-Funktion optim() der Fall.

Verwandte Themen