R语言中矩阵、向量在内存上的区别

本文探讨了R语言中向量和矩阵在内存管理上的不同。向量在创建时会预分配空间,即使访问超出范围的下标,也会返回NA,而不是引发错误,这允许在不重新分配内存的情况下高效地扩展向量。相比之下,矩阵的内存空间一旦确定,不能自动扩展,尝试访问越界下标会导致错误。这种特性使得向量在某些情况下能提供更高的运行效率。
摘要由CSDN通过智能技术生成
向量

在初始创建时,系统就给分配了足够的空间,没有赋值的下标对应的值都用NA代替了,所以向量不存在下标超出的限制比如:

> x
[1] 1 2
> length(x)
[1] 2
> x[100]
[1] NA
> length(x)
[1] 2
> x[100]=3
> length(x)
[1] 100

创建x时给了两个数字,所以长度为2。但是取值x[100]时显示的是NA并非下标越界,当赋值x[100]=3时,x的长度变为了100。

这种性质的好处就是可以取代向量的重新赋值语句比如:

>x<- c(x,2)

可以使用以下语句代替:

>x[length(x)+1]=2

这样的好处就是由于不用重新赋值,不需要重新分配内存,因此可以大大提升程序的效率,比如:

> create_vector2<-function(k)
+ {
+   gh=c()
+   for(i in 1:k){
+     gh=c(gh,i)
+   }
+   return(gh)
+ }
> create_vector1<-function(k)
+ {
+   gh=c()
+   gh[1:k]=1:k
+   return(gh)
+ }

以上为两个创建向量的函数,运行时间测量如下:

> system.time(create_vector1(10000))     #创建10000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值