Відповіді:
Або прочитайте його за допомогою "scan", або просто зробіть as.vector () на матриці. Ви можете спочатку перенести матрицю, якщо ви хочете її за допомогою рядків або стовпців.
> 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, то ви повинні запитати себе, чи є змінні одного типу? Якщо це так, ви можете скористатися репліками або unlist, оскільки data.frames - це списки, глибоко в їх душі ...
data(mtcars)
unlist(mtcars)
rapply(mtcars, c) # completely stupid and pointless, and slower
З ?matrix
: "Матриця - це особливий випадок двовимірного" масиву "." Ви можете просто змінити розміри матриці / масиву.
Elts_int <- as.matrix(tmp_int) # read.table returns a data.frame as Brandon noted
dim(Elts_int) <- (maxrow_int*maxcol_int,1)
ви можете використовувати as.vector()
. Схоже, це найшвидший метод за моїм маленьким орієнтиром:
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)
Перше рішення використовує as.vector()
, друге використовує той факт, що матриця зберігається як суміжний масив у пам'яті та length(m)
дає кількість елементів у матриці m
. Третя інстанціює array
з x
, а четверта використовує сполучену функцію c()
. Я також спробував unmatrix
з gdata
, але це занадто повільно , щоб згадати тут.
Ось деякі числові результати, які я отримав:
> 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
Вирівнювання матриці - це звичайна операція в машинному навчанні, де матриця може представляти параметри для навчання, але використовується алгоритм оптимізації з загальної бібліотеки, який очікує вектор параметрів. Тож прийнято перетворювати матрицю (або матриці) на такий вектор. Це справа зі стандартною функцією R optim()
.
Ви можете використовувати рішення Джошуа, але я думаю, вам це потрібно Elts_int <- as.matrix(tmp_int)
Або для петель:
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-вектор.