gpt4 book ai didi

r - 在 R 中将矩阵强制转换为整数矩阵的最快方法

转载 作者:行者123 更新时间:2023-12-04 12:08:25 24 4
gpt4 key购买 nike

我刚刚意识到,如果你创建一个带有整数值的矩阵,它们会被存储为数字。

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

我想知道您是否可以想到任何其他方法来做到这一点,以及它是否会更快或更高效。

session 信息
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)

编辑:第一次测试

我定义了一个函数,它执行 Richard Scriven 的回答所描述的,以及我定义和测试速度的函数。
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

有一个明显的赢家。

最佳答案

如果你这样做 c(0, 1, 0, 1) ,看起来您将创建整数,但实际上您正在创建一个 double 向量。对于整数,您必须使用 c(0L, 1L, 0L, 1L) , 或 rep(0:1, 2) (因为 : 创建了一个整数向量)。要将矩阵更改为整数,您可以更改其内部存储模式。

a <- matrix(c(0,1,0,1), ncol=2)
object.size(a)
# 232 bytes
mode(a) <- "integer"
object.size(a)
# 216 bytes

我不知道它有多快,但它很容易。

关于r - 在 R 中将矩阵强制转换为整数矩阵的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36943953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com