Answers:
来自?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
from 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向量。