R语言矩阵基础操作

将z数组作为10*10矩阵看待
> z > attr(z,"dim") > z
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    1   11   21   31   41   51   61   71   81    91
 [2,]    2   12   22   32   42   52   62   72   82    92
 [3,]    3   13   23   33   43   53   63   73   83    93
 [4,]    4   14   24   34   44   54   64   74   84    94
 [5,]    5   15   25   35   45   55   65   75   85    95
 [6,]    6   16   26   36   46   56   66   76   86    96
 [7,]    7   17   27   37   47   57   67   77   87    97
 [8,]    8   18   28   38   48   58   68   78   88    98
 [9,]    9   19   29   39   49   59   69   79   89    99
[10,]   10   20   30   40   50   60   70   80   90   100

> b > b
  [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14
 [15]  15  16  17  18  19  20  21  22  23  24  25  26  27  28
 [29]  29  30  31  32  33  34  35  36  37  38  39  40  41  42
 [43]  43  44  45  46  47  48  49  50  51  52  53  54  55  56
 [57]  57  58  59  60  61  62  63  64  65  66  67  68  69  70
 [71]  71  72  73  74  75  76  77  78  79  80  81  82  83  84
 [85]  85  86  87  88  89  90  91  92  93  94  95  96  97  98
 [99]  99 100
 
z有1500个元素组成的向量,下面语句使他具有dim属性,并且被当作3*5*100的数组进行处理。
dim(z) 如果在任何下标给出空值,意味着选择这个下标的所有值。

除了赋予一个向量dim属性外,还可以用array来从向量构建数组。
> b > b
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

数据外积操作。维数向量和有原数组连接而成,属性和操作属性有关。数据向量有a的所有向量和b的所有向量的所有可能乘机产生
> a
[1] 1 2 3 4 5
> b > b
[1] 10 11 12 13 14 15
> ab > ab
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   10   11   12   13   14   15
[2,]   20   22   24   26   28   30
[3,]   30   33   36   39   42   45
[4,]   40   44   48   52   56   60
[5,]   50   55   60   65   70   75
cd

数组的广义转置 :我理解就是维度变换,不过对于多为怎么换还是不好理解。

> cd
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   10   11   12   13   14   15
[2,]   20   22   24   26   28   30
[3,]   30   33   36   39   42   45
[4,]   40   44   48   52   56   60
[5,]   50   55   60   65   70   75
如果A和B同样大小的方阵,那么结果即使对应元素的乘机。
> ab *cd
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]  100  121  144  169  196  225
[2,]  400  484  576  676  784  900
[3,]  900 1089 1296 1521 1764 2025
[4,] 1600 1936 2304 2704 3136 3600
[5,] 2500 3025 3600 4225 4900 5625


> e > e
     [,1] [,2] [,3] [,4] [,5]
[1,]   10   20   30   40   50
[2,]   11   22   33   44   55
[3,]   12   24   36   48   60
[4,]   13   26   39   52   65
[5,]   14   28   42   56   70
[6,]   15   30   45   60   75
> f > f
     [,1] [,2] [,3] [,4] [,5]
[1,]   10   20   30   40   50
[2,]   11   22   33   44   55
[3,]   12   24   36   48   60
[4,]   13   26   39   52   65
[5,]   14   28   42   56   70
[6,]   15   30   45   60   75

> f  数组行列
     [,1] [,2] [,3] [,4] [,5]
[1,]   10   20   30   40   50
[2,]   11   22   33   44   55
[3,]   12   24   36   48   60
[4,]   13   26   39   52   65
[5,]   14   28   42   56   70
[6,]   15   30   45   60   75
> nrow(f)
[1] 6
> ncol(f)
[1] 5

a %*% B 是矩阵乘积,1*n数组和n*1数组可以看作是一个n维向量。
> a > b > a %*% b
     [,1]
[1,]   55
> a
[1] 1 2 3 4 5
> b
[1] 1 2 3 4 5
> crossprod(a,b)
     [,1]
[1,]   55
> t(a) %*% b
     [,1]
[1,]   55

猜测,只是不知道如何解释他们的现实意义。

 1 2  3  4  5
 2 4  6  8  10
 3 6  9  12 15
 4 8  12 16 20
 5 10 15 20 25
 1+4+9 +16 +25 =  55
 
线性方程和矩阵的转:求解线性方程是矩阵乘法的逆运算。
solve(c) 代码1/c c的倒数。会损失精度。

> a > b > c > c
     [,1]
[1,]   50
> solve(a,c)
     [,1]
[1,]    5

最小二乘拟合结果lsfit返回
lsfit(X,y)  其中X为设计矩阵,y是观测值向量

rbind、cbind矩阵组合,在dim(维度)上链接,有些限制,要对齐。文档叫构建分区矩阵。
c函数忽略维度,直接连接,想试链表。
> a > b > cbind(a,b)
       a  b
 [1,]  1 21
 [2,]  2 22
 [3,]  3 23
 [4,]  4 24
 [5,]  5 25
 [6,]  6 26
 [7,]  7 27
 [8,]  8 28
 [9,]  9 29
[10,] 10 30
> rbind(a,b)
  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
a    1    2    3    4    5    6    7    8    9    10
b   21   22   23   24   25   26   27   28   29    30
> c(a,b)
 [1]  1  2  3  4  5  6  7  8  9 10 21 22 23 24 25 26 27 28 29
[20] 30

说明:state数组和incomes具有相同元素
> state > statef > statef
 [1] tas sa  qld nsw nsw nt  wa  wa  qld vic nsw vic qld qld
[15] sa  tas sa  nt  wa  vic qld nsw nsw wa  sa  act nsw vic
[29] vic act
Levels: act nsw nt qld sa tas vic wa
> levels(statef)
[1] "act" "nsw" "nt"  "qld" "sa"  "tas" "vic" "wa"
> incomes +              61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46,
+              59, 46, 58, 43)
>
> incomes
 [1] 60 49 40 61 64 60 59 54 62 69 70 42 56 61 61 61 58 51 48
[20] 65 49 49 41 48 52 46 59 46 58 43
> incmeans > incmeans
     act      nsw       nt      qld       sa      tas      vic        wa
44.50000 57.33333 55.50000 53.60000 55.00000 60.50000 56.00000    52.25000

> stderr > stderr
function(x) sqrt(var(x)/length(x))
> incster > incster
     act      nsw       nt      qld       sa      tas      vic         wa
1.500000 4.310195 4.500000 4.106093 2.738613 0.500000 5.244044   2.657536

> statefr >
> statefr >
> factor(cut(incomes, breaks = 35+10*(0:7))) -> incomef
> table(incomef,statef)
         statef
incomef   act nsw nt qld sa tas vic wa
  (35,45]   1   1  0   1  0   0   1  0
  (45,55]   1   1  1   1  2   0   1  3
  (55,65]   0   3  1   3  2   2   2  1
  (65,75]   0   1  0   0  0   0   1  0

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15711267/viewspace-1062867/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15711267/viewspace-1062867/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值