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

Python09

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

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

向量

在初始创建时,系统就给分配了足够的空间,没有赋值的下标对应的值都用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长度的向量,函数1运行时间

用户 系统 流逝

000

>system.time(create_vector2(10000)) #创建10000长度的向量,函数2运行时间

用户 系统 流逝

0.11 0.00 0.11

>system.time(create_vector1(100000)) #创建100000长度的向量,函数1运行时间

用户 系统 流逝

000

>system.time(create_vector2(100000)) #创建100000长度的向量,函数1运行时间

用户 系统 流逝

11.48 0.01 11.71

可以看到函数1明显比函数2快很多。函数1的运行时间基本为0。

矩阵

矩阵并没有这种性质,矩阵的内存空间是初始创建空间的大小。一但确定,只有通过重新赋值来改变。所以会出现下标越界等错误。

摘自: https://www.cnblogs.com/yupeter007/p/5325575.html

矩阵的存储默认是按列进行存储的

matrix (data = NA, nrow = 1, ncol = 1, byrow =FALSE, dimnames = NULL)

创建一个c(1:12)的三行四列的矩阵,

colnames<-c("c1","c2","c3","c4")

rownames<-c("r1","r2","r3")

x<-matrix(1:12,nrow=3,ncol=4,byrow=TRUE,dimnames=list(rownames,colnames))

x

c1 c2 c3 c4

r1 1 2 3 4

r2 5 6 7 8

r3 9 10 11 12

y<-t(x)

若是针对的是一个向量

y<-(1:10)

装置后得到的是行向量

[1] "matrix"

若要的到列向量则

matrix(rnorm(100),nrow=10)

matrix(2,ncol=n,nrow=m)

4.1创建对角矩阵

diag(x,ncol=n,nrow=m)

若x为矩阵 则diag(x)将会提取矩阵x的对角,则返回的是向量值

返回的是以矩阵对角的对角矩阵

[,1] [,2] [,3]

[1,] 1 0 0

[2,] 0 1 0

[3,] 0 0 1

n<-ncol

m<-nrow

为矩阵的行和列命名

rownames(x)<-c()

colnames(x)<c()

A为m×n矩阵,c>0,在R中求cA可用符号:“*”,例如:

A为m×n矩阵,B为n×k矩阵,在R中求AB可用符号:“%*%”,例如:

对矩阵求逆

方法一:直接用solve(x)

方法二:加载包MASS

library(MASS)

ginv(matrix)

向量的内积

x<-c(1:5)

y<-c(3:7)

向量的外积

向量、矩阵的外积(叉积)

设x和y是n维向量,则x%o%y表示x与y作外积.

, , 2, 1

[,1] [,2] [,3] [,4]

[1,]28 14 20

[2,]4 10 16 22

[3,]6 12 18 24

, , 1, 2

[,1] [,2] [,3] [,4]

[1,]3 12 21 30

[2,]6 15 24 33

[3,]9 18 27 36

, , 2, 2

[,1] [,2] [,3] [,4]

[1,]4 16 28 40

[2,]8 20 32 44

[3,] 12 24 36 48

outer()是更为强大的外积运算函数,outer(x,y)计算向量x与y的外积,它等价于x %o%y

函数。outer()的一般调用格式为

outer(x,y,fun=”*”)

det(x),求矩阵x的行列式值

qr(x)$rank求x矩阵的秩

解线性方程组和求矩阵的逆矩阵