Jawaban:
Bacalah dengan 'scan', atau lakukan as.vector () pada matriks. Anda mungkin ingin mengubah urutan matriks terlebih dahulu jika Anda menginginkannya menurut baris atau kolom.
> 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
Jika kita berbicara tentang data.frame, maka Anda harus bertanya pada diri sendiri apakah variabel-variabel tersebut berjenis sama? Jika demikian, Anda dapat menggunakan rapply, atau unlist, karena data.frames adalah list, jauh di lubuk hati mereka ...
data(mtcars)
unlist(mtcars)
rapply(mtcars, c) # completely stupid and pointless, and slower
Dari ?matrix
: "Matriks adalah kasus khusus dari 'larik' dua dimensi." Anda cukup mengubah dimensi matriks / larik.
Elts_int <- as.matrix(tmp_int) # read.table returns a data.frame as Brandon noted
dim(Elts_int) <- (maxrow_int*maxcol_int,1)
Anda bisa menggunakan as.vector()
. Sepertinya itu adalah metode tercepat menurut patokan kecil saya, sebagai berikut:
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)
Solusi pertama menggunakan as.vector()
, yang kedua menggunakan fakta bahwa matriks disimpan sebagai array yang berdekatan dalam memori dan length(m)
memberikan jumlah elemen dalam matriks m
. Yang ketiga membuat contoh array
dari x
, dan yang keempat menggunakan fungsi gabungan c()
. Saya juga mencoba unmatrix
dari gdata
, tetapi terlalu lambat untuk disebutkan di sini.
Berikut adalah beberapa hasil numerik yang saya peroleh:
> 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
Meratakan matriks adalah operasi umum dalam Pembelajaran Mesin, di mana matriks dapat mewakili parameter yang akan dipelajari, tetapi matriks menggunakan algoritme pengoptimalan dari pustaka umum yang mengharapkan vektor parameter. Jadi adalah umum untuk mengubah matriks (atau matriks) menjadi vektor seperti itu. Ini halnya dengan fungsi R standar optim()
.
Anda dapat menggunakan solusi Joshua tetapi saya pikir Anda membutuhkannya Elts_int <- as.matrix(tmp_int)
Atau untuk loop:
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 adalah vektor 1d.