вы можете использовать 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()
.