回答:
From ?matrix
:「行列は2次元の「配列」の特殊なケースです。」行列/配列の次元を変更するだけです。
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()
、2番目のソリューションは行列がメモリ内の連続した配列として格納されlength(m)
、行列内の要素の数を提供するという事実を使用しますm
。3番目はarray
fromをインスタンス化x
し、4番目は連結関数を使用します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
行列の平坦化は機械学習の一般的な操作です。ここでは、行列は学習するパラメーターを表すことができますが、パラメーターのベクトルを期待する汎用ライブラリーの最適化アルゴリズムを使用します。そのため、行列(1つまたは複数)をそのようなベクトルに変換するのが一般的です。これは標準のR関数の場合optim()
です。
あなたはジョシュアの解決策を使うことができますが、私はあなたが必要だと思います Elts_int <- as.matrix(tmp_int)
またはforループ:
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ベクトルです。