zoukankan      html  css  js  c++  java
  • R学习-- 数组和矩阵

    生成 4行5列的数组,逐列逐行赋值
    x = array(1:20, dim= c(4,5))


    依据已知向量生成二维数组
    i = array(c(1:3,3:1,4:6,5:7), dim=c(3,4))
    也能够调整行列顺序 (3行4列变为4行3列)
    i = array (c(1:3,3:1,4:6,7:9), dim=c(4,3))


    数组a元素作为索引值操作数组b
    i为一个二维数组,x[i]为x[i[1,1]],x[i[1,2]]...x[i[1,n]]...x[i[2,1]],x[i[2,2]]...x[i[n,n]]。比如
    x[i] = 0 操作。就是将数组i中的元素取出为i[m,n],为x[i[m,n]]一一赋值。m∈[1,行数],n∈[1,列数]。


    创建3*4矩阵。初始化每一个元素为0
    b = matrix(0,3,4)


    向矩阵最后加入一列
    b = cbind(b,1:3)


    向矩阵最后加入一行
    a = matrix(c(1:9),3,3)
    a = rbind(a,c(9,9,9))


    将一个数组强制转换成简单向量
    vec=as.vector(a)
    或者
    vec=c(a)


    矩阵(向量)相乘
    crossprod(1:5,2:6)


    创建表格
    table(c(1:4), c(2:5))


    基于数据向量与维度创建数组
    z=array(c(1,2,3), dim=c(2,3,4))
    基于数据向量<1,2,3>创建4组,3列两行的表格


    动态调整维度
    z=array(c(1,2,3), dim=c(2,3,4))
    dim(z) = c(2,2,6)
    z变成了6组,2列2行的表格


    数组操作
    a=array(c(1,2),dim=c(3,4))
    b = 2*a+1


    求向量a,b外积的函数
    outer(c(1,2,3),c(3,2,1))  (等价于c(1,2,3)%o%c(3,2,1))


    过程:
    a :<1,2,3>  
    b :
    <
    3
    2
    1
    >
    向量a与b的外积:


    1*3, 1*2, 1*1
    2*3, 2*2, 2*1
    3*3, 3*2, 3*1


    还能够把外积函数替换为其它函数(比如平方和)
    outer(x,y,function(x,y)x*x+y*y)


    使用plot绘制函数
    比如y=x^2
    x=c(1:20)
    plot(x,x*x)


    矩阵旋转
    a = matrix(c(1,2,3,4,5,6,7,8),2,4)
    b = aperm(a,c(2,1))
    过程:
    a :
    [1 3 5 7]
    [2 4 6 8]
    aperm(a, c(2,1)):
    [1 2]
    [3 4]
    [5 6]
    [7 8]
    aperm(a)等价于t(a)


    矩阵相乘
    a = matrix(c(1,2,3,4,5,6,7,8),2,4)
    b = matrix(c(2,2,2,2),4,1)
    x = a %*% b
    以上将完毕 2*4矩阵和4*1矩阵相乘


    求方(矩)阵对角元素
    a = matrix(c(1:9),3,3)
    diag(a)
    会取得 1,5,9


    生成正太分布随机数
    rnorm(10)


    查看矩阵维数
    a= matrix(c(1:4),2,2)
    dim(a)
    改变矩阵维
    dim(a) = c(1,4)


    求方阵的行列式的值
    det(matrix(rnorm(9),3,3))


    求值过程 (对角线展开):
    [a(1,1), a(1,2), a(1,3)]
    [a(2,1), a(2,2), a(2,3)]
    [a(3,1), a(3,2), a(3,3)]
    X = a(1,1)*a(2,2)*a(3,3)+a(2,1)*a(3,2)*a(1,3)+a(3,1)*a(2,3)*a(1,2)-a(1,3)*a(2,2)*a(3,1)-a(1,2)*a(2,1)*a(3,3)-a(1,1)*a(3,2)*a(2,3)


    求逆矩阵
    a = matrix(rnorm(9),3,3)
    solve(a)
    并不是每一个矩阵都可逆,弱为可逆矩阵,在初等变换的过程中,不会出现整行或整列所有为0的情况。


    也能够用det函数来推断矩阵行列式的值,假设为0则不可逆。


    求特征向量和特征值
    a = matrix(c(1,2,1,2),2,2)
    eigen(a)
    eigen(a)$values
    对于大型矩阵,能够仅仅计算特征值
    eigen(a, only.values = TRUE)$values


    投影
    a = matrix(c(1,2,1,2),2,2)
    prod(a)


    神秘值分解
    svd(a)


    依据已知向量计算最小二乘拟合
    lsfit(c(1,2,3,4),c(2,3,4,3))
    会求出直线的斜率和截距
    对于本例:
    Intercept(斜率)         X(截距) 
    [1,]      -2.0 -5.0000000
    [2,]       0.5 -2.2360680
    [3,]       0.5  0.4472136
    [4,]       0.5  0.8944272


    实例 :
    a = c(1,2,3,4)
    b = c(1,3,4,5)
    plot(a,b)
    abline(lsfit(a,b))
    或者 lm(a~b)




    将矩阵QR分解。


    Q:正交矩阵
    R:上三角矩阵
    a = matrix(c(1:9),3,3)
    q = qr(a)
    qr.Q(q)
               [,1]       [,2]       [,3]
    [1,] -0.2672612  0.8728716  0.4082483
    [2,] -0.5345225  0.2182179 -0.8164966
    [3,] -0.8017837 -0.4364358  0.4082483


    qr.R(q)
              [,1]      [,2]          [,3]
    [1,] -3.741657 -8.552360 -1.336306e+01
    [2,]  0.000000  1.963961  3.927922e+00
    [3,]  0.000000  0.000000  1.776357e-15


    另外,
    > b <- qr.coef(Xplus, y)
    > fit <- qr.fitted(Xplus, y)
    > res <- qr.resid(Xplus, y)
    会返回qr分解的系数,拟合和残差。



  • 相关阅读:
    ES6 import、export的写法
    不带分号可能会引起出错的情况
    npm传参技巧
    深度优先遍历和广度优先遍历
    WebGL的shader
    web component
    页面的beforeunload和unload的事件应用
    暴搜
    子集树与排列树
    概率论
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7238935.html
Copyright © 2011-2022 走看看