2
整数値を持つ行列を作成すると、むしろ数値として格納されることに気付きました。行列を整数行列に強制的に変換する最速の方法R
a <- matrix(c(0,1,0,1), ncol=2)
class(a[1,]) # numeric
整数の行列は、(大規模の場合)メモリの半分の量を必要とします。
forceMatrixToInteger <- function(m){
apply (m, c (1, 2), function (x) {
(as.integer(x))
})
}
a <- forceMatrixToInteger(a)
class(a[1,]) # integer
私はあなたがこれを行うには、他の方法を考えることができれば、それはより速く以上のメモリ効率的であるかどうかを知りたいと思った: 次の関数は、整数へのすべての値を強制します。
のSessionInfo
R version 3.2.3 (2015-12-10)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.3 (El Capitan)
EDIT:最初のテスト
私はリチャードスクリヴンの答えは説明し何が機能し、私が定義されたものを定義し、速度をテストしました。
exp_size <- 4
exp_reps <- 3
mat <- matrix(sample(c(0,1), 10^exp_size, replace=TRUE),ncol=10^(exp_size/2))
fun1<-function(){
mode(mat) <- 'integer'
}
time <- proc.time()
for (i in 1:10^exp_reps){
fun1()
}
time <- proc.time()-time
print('Results fun1:')
print(time)
print(time)
# user system elapsed
# 0.096 0.035 0.132
fun2 <- function(){
apply (mat, c (1, 2), function (x) {
(as.integer(x))
})
}
time <- proc.time()
for (i in 1:10^exp_reps){
fun2()
}
time <- proc.time()-time
print('Results fun2:')
print(time)
# user system elapsed
# 22.592 0.148 22.775
明確な優勝者があります。
私のために働いていない! – latorrefabian
>マット< - マトリックス(1:1000000、のNcoI = 1000) > DIM(MAT) [1] 1000~1000 > object.size(マット) 4000200バイト>モード(MAT)< - '整数' > object.size(mat) 4000200バイト >クラス(mat [1、]) [1] "整数" – latorrefabian
Rバージョン3.2.3(2015-12-10) プラットフォーム:x86_64-apple-darwin13.4.0 (64ビット) 実行中:OS X 10.11.3(El Capitan) – latorrefabian