Yanıtlar:
Ya 'tarama' ile okuyun ya da matris üzerinde olduğu gibi yapın. Vektör (). Satırlara veya sütunlara göre istiyorsanız, önce matrisi transpoze etmek isteyebilirsiniz.
> 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
Data.frame'den bahsediyorsak, o zaman kendinize aynı türden değişkenler olup olmadığını sormalısınız. Durum buysa, rapply veya unlist kullanabilirsiniz, çünkü data.frames, ruhlarının derinliklerinde listelerdir ...
data(mtcars)
unlist(mtcars)
rapply(mtcars, c) # completely stupid and pointless, and slower
From ?matrix
: "Bir matris, iki boyutlu bir 'dizinin' özel durumudur." Matrisin / dizinin boyutlarını kolayca değiştirebilirsiniz.
Elts_int <- as.matrix(tmp_int) # read.table returns a data.frame as Brandon noted
dim(Elts_int) <- (maxrow_int*maxcol_int,1)
kullanabilirsiniz as.vector()
. Aşağıdaki gibi benim küçük ölçütüme göre en hızlı yöntem gibi görünüyor:
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)
İlk çözüm as.vector()
, bir matrisin bellekte bitişik bir dizi olarak saklandığı ve length(m)
bir matristeki elemanların sayısını verdiği gerçeğini kullanır m
. Üçüncüsü , bir array
from örneğini oluşturur x
ve dördüncü, concatenate işlevini kullanır c()
. Ben de denedim unmatrix
gelen gdata
, ancak burada belirtilmesi gereken çok yavaş.
İşte elde ettiğim sayısal sonuçlardan bazıları:
> 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
Bir matrisin düzleştirilmesi, Makine Öğreniminde yaygın bir işlemdir, burada bir matris öğrenilecek parametreleri temsil edebilir, ancak biri bir parametre vektörü bekleyen genel bir kitaplıktan bir optimizasyon algoritması kullanır. Dolayısıyla matrisi (veya matrisleri) böyle bir vektöre dönüştürmek yaygındır. Standart R işlevinde durum böyledir optim()
.
Joshua'nın çözümünü kullanabilirsiniz ama bence ihtiyacınız var Elts_int <- as.matrix(tmp_int)
Veya döngüler için:
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 1d vektördür.