R语言 实现矩阵相乘100次

【D1 D2】2*1

【T1 T2】1*2

要求D1和D2随机的变动, 矩阵相乘100次

rm(list=ls())
gc()
options(scipen = 2000)
##################写成函数###########3
#################定义TT矩阵(1*2)
TT <- matrix(c(1,3),1,2)
DD<- matrix(c(1,2),2,1)
result1 <- DD %*% TT
m1=result1
######################设定随机取的整数范围
x <- 1:100
m=data.frame()
#################变换DD矩阵(2*1)##############
for (i in 2:100){
 D2<- matrix(c(sample(x,1,replace=TRUE),sample(x,1,replace=TRUE)),2,1)
 # print(D2)
 result <- D2%*% TT
 print(result)
 m <- rbind(m,result)
 result1 <- result %*% result1
}
(finally_result <- result1)
(m_all <- rbind(m,m1))

补充:R语言之矩阵操作和运算

1.转置运算

对于矩阵A,函数t(A)表示矩阵A的转置,如:

> A=matrix(1:6,nrow=2);
> A;
  [,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> t(A);
  [,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6

2.求方阵的行列式

函数det()是求矩阵行列式的值,如

> det(matrix(1:4,ncol=2));
[1] -2

3.向量的内积

对于n维向量x,可以看成nxl阶矩阵或lxn阶矩阵。若x与y是相同

维数的向量,则x%*%Y表示x与y作内积.例如,

>x=1:5; Y=2*1:5
>x%*%y
  [,1]
[1,]110

函数crossprod()是内积运算函数(表示交叉乘积),crossprod(x,y)计算向量x与y的内积,即t(x) %*% y'。crossprod(x)表示x与x的内积.

类似地,tcrossprod(x,y)表示'x%*%t(Y)',即x与y的外积,也称为叉积。tcrossprod(x)表示x与x作外积.如:

> x=1:5; y=2*1:5;
> crossprod(x);
  [,1]
[1,] 55
> crossprod(x,y);
  [,1]
[1,] 110
> tcrossprod(x);
  [,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 2 4 6 8 10
[3,] 3 6 9 12 15
[4,] 4 8 12 16 20
[5,] 5 10 15 20 25
> tcrossprod(x,y);
  [,1] [,2] [,3] [,4] [,5]
[1,] 2 4 6 8 10
[2,] 4 8 12 16 20
[3,] 6 12 18 24 30
[4,] 8 16 24 32 40
[5,] 10 20 30 40 50

4.向量的外积(叉积)

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

> x%o%y;
  [,1] [,2] [,3] [,4] [,5]
[1,] 2 4 6 8 10
[2,] 4 8 12 16 20
[3,] 6 12 18 24 30
[4,] 8 16 24 32 40
[5,] 10 20 30 40 50

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

outer()的一般调用格式为 outer(x,y,fun=”*”)

其中x, y矩阵(或向量),fun是作外积运算函数,缺省值为乘法运算。函数outer()在绘制三维曲面时非常有用,它可生成一个x和y的网格。

5.矩阵的乘法

设A和B为两个矩阵,通常意义下的矩阵乘法是通过A%*%B来完成,crossprod(A,B)表示的是

t(A)%*%B,而tcrossprod(A,B)表示的是A%*%t(B)。最后我们通过运算知道x%*%A%*%x为二次型。

> A=array(1:9,dim=(c(3,3)))
> B=array(9:1,dim=(c(3,3)))
> A%*%B;
  [,1] [,2] [,3]
[1,] 90 54 18
[2,] 114 69 24
[3,] 138 84 30
> crossprod(A,B)==t(A)%*%B;
  [,1] [,2] [,3]
[1,] TRUE TRUE TRUE
[2,] TRUE TRUE TRUE
[3,] TRUE TRUE TRUE
> tcrossprod(A,B)==A%*%t(B);
  [,1] [,2] [,3]
[1,] TRUE TRUE TRUE
[2,] TRUE TRUE TRUE
[3,] TRUE TRUE TRUE

6.生成对角阵和矩阵取对角运算

函数diag()依赖于它的变量,当v是一个向量时,diag(v)表示以v的元素为对角线元素的对角阵.当M是一个矩阵时,则diag(M)表示的是取M对角线上的元素的向量.如

> v=c(1,4,5);
> diag(v);
  [,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 4 0
[3,] 0 0 5
> M=array(1:9,dim=c(3,3));
> diag(M);
[1] 1 5 9

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

若求解线性方程组Ax=b,其命令形式为solve(A,b),求矩阵A的逆,其命令形式为solve(A).设矩阵A=t(array(c(1:8,10),dim=c(3,3))),b<-c(1,1,1),则解方程组Ax=b的解x和求矩阵A的逆矩阵的命令如下:

> A=t(array(c(1:8,10),dim=c(3,3)));
> b=c(1,1,1);
> x=solve(A,b);
> x;
[1] -1.000000e+00 1.000000e+00 3.806634e-16
> solve(A);
   [,1]  [,2] [,3]
[1,] -0.6666667 -1.333333 1
[2,] -0.6666667 3.666667 -2
[3,] 1.0000000 -2.000000 1

8.求矩阵的特征值与特征向量

函数eigen(Sm)是求对称矩阵Sm的特征值与特征向量,其命令形式为:ev=eigen(Sm),则ev存放着对称矩阵Sm特征值和特征向量,是由列表形式给出的,其中ev$values是Sm的特征值构成的向量,ev$vectors是Sm的特征向量构成的矩阵.如

> Sm=crossprod(A,A);
> ev=eigen(Sm);
> ev;
$values
[1] 303.19533618 0.76590739 0.03875643
$vectors
   [,1]   [,2]  [,3]
[1,] -0.4646675 0.833286355 0.2995295
[2,] -0.5537546 -0.009499485 -0.8326258
[3,] -0.6909703 -0.552759994 0.4658502

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • R语言-实现按日期分组求皮尔森相关系数矩阵

    R语言按日期分组求相关系数 前几天得到了3700+支股票一周内的波动率,想要计算每周各个股票之间的相关系数并将其可视化.最终结果保存在制定文件夹中. 部分数据如下: 先读取数据 data<-read.csv("D:/data/stock_day_close_price_week_series.csv", header = TRUE,blank.lines.skip = TRUE) 利用mice包处理缺失值: library(lattice) library(MASS) libra

  • R语言-解决处理矩阵遇到内存不足的问题

    如下: Error : cannot allocate vector of size X Gb 类似于这种问题的可能处理办法: 1. 可以用matrix尽量不要用data frame; 2. 可以用integer matrix尽量不要用 double matrix; 3. 对于大量运算后最好加上一个gc(), 强制R语言回收内存: 4. 对于大矩阵而言用bigmemory包,可以将大矩阵放到临时文件中,不占用内存. 补充:R语言之内存管理 在处理大型数据过程中,R语言的内存管理就显得十分重要,以

  • R语言中igraph包的用法(邻接矩阵)

    先导入igraph包: library(igraph) graph包最简单的用法就是graph方法,两句代码就完成绘制如下所示,1的loop表示为(1,1),1和2之间有3条edge,表示为(1,2,1,2,1,2) g <- graph(c(1,1,1,2,1,2,1,2,1,5,2,3,2,4,2,5,3,3,3,4,3,4,3,4,4,5),directed = FALSE) plot(g) 如果用顶点的邻接矩阵表示,仍以上图为例: 则对1,1有loop,与2有条edge,与5有一条edg

  • R语言中矩阵matrix和数据框data.frame的使用详解

    本文主要介绍了R语言中矩阵matrix和数据框data.frame的一些使用,分享给大家,具体如下: "一,矩阵matrix" "创建向量" x_1=c(1,2,3) x_1=c(1:3) x_2=1:3 typeof(x_1)==typeof(x_2)#查看目标类型 x_3=seq(1,6,length=3)#将1--6分为3个数 a<-rep(1:3,each=3) #1到3依次重复 c<-rep(1:3,times=3) #1到3重复3次 d<

  • R语言矩阵知识点总结及实例分析

    矩阵是其中元素以二维矩形布局布置的R对象. 它们包含相同原子类型的元素. 虽然我们可以创建一个只包含字符或只包含逻辑值的矩阵,但它们没有太多用处. 我们使用包含数字元素的矩阵用于数学计算. 使用matrix()函数创建一个矩阵. 语法 在R语言中创建矩阵的基本语法是 matrix(data, nrow, ncol, byrow, dimnames) 以下是所使用的参数的说明 数据是成为矩阵的数据元素的输入向量. nrow是要创建的行数. ncol是要创建的列数. byrow是一个逻辑线索. 如果

  • R语言中常见的几种创建矩阵形式总结

    矩阵概述 R语言的实质实质上是与matlab差不多的,都是以矩阵为基础的 在R语言中,矩阵(matrix)是将数据按行和列组织数据的一种数据对象,相当于二维数组,可以用于描述二维的数据.与向量相似,矩阵的每个元素都拥有相同的数据类型.通常用列来表示来自不同变量的数据,用行来表示相同的数据. R中创建矩阵的语法格式 在R语言中可以使用matrix()函数来创建矩阵,其语法格式如下: matrix(data=NA, nrow = 1, ncol = 1, byrow = FALSE, dimname

  • R语言实现导出矩阵

    程序实在是调不出来了,我决定破釜沉舟,直接把所有表格都打印出来,看看数据到底哪儿有问题. 然后就开始了闹心的矩阵导出... 首先,百度了一下,数据导出的代码为: write.table (x, file ="", sep ="", row.names =TRUE, col.names =TRUE, quote =TRUE) 其中: x:需要导出的数据 file:导出的文件路径 sep:分隔符,默认为空格(" "),也就是以空格为分割列 row.n

  • R语言-如何将循环所得的矩阵组成一个矩阵

    在矩阵合并中,常见的方法有cbind()和rbind() 其中,前者为按列合并,后者为按行合并. 但是这两个函数有个缺点,就是不能应用到循环之中.例如: A<-matrix(1:12,nrow = 4,byrow = T) B<-matrix(1:8,nrow = 4,byrow = T) C<-cbind(A,B) 得到的矩阵C为[按列合并两者行数必须相同]: 但是如果将这个方法应用在循环中,就无法取得预期效果: A<-matrix(1:12,nrow = 4,byrow = T

  • R语言 实现矩阵相乘100次

    [D1 D2]2*1 [T1 T2]1*2 要求D1和D2随机的变动, 矩阵相乘100次 rm(list=ls()) gc() options(scipen = 2000) ##################写成函数###########3 #################定义TT矩阵(1*2) TT <- matrix(c(1,3),1,2) DD<- matrix(c(1,2),2,1) result1 <- DD %*% TT m1=result1 ##############

  • R语言创建矩阵的实现方法

    矩阵 向量vector用于描述一维数据,是R语言中最基础的数据结构形式 矩阵matrix可以描述二维数据,和向量相似,其内部元素可以是实数.复数.字符.逻辑型数据 矩阵包含行和列,分为单位矩阵.对角矩阵和普通矩阵.矩阵可以进行四则运算,以及进行求特征值.特征向量等运算 矩阵matrix使用两个下标来访问元素,A[i,j]表示矩阵A第i行.第j列的元素 矩阵创建--matrix函数 matrix函数创建矩阵,其格式为: matrix(data = NA,nrow = 1,ncol = 1,byro

  • R语言 出现矩阵/缺失值的解决方案

    缺失值处理一般包括三步: 1. 识别缺失数据: 2. 检查导致数据缺失的原因: 3. 删除包含缺失值的实例或用合理的数值代替(插补)缺失值. 1.判断缺失值 函数is.na().is.nan()和is.infinite()可分别用来识别缺失值.不可能值和无穷值.每个返回结果都是 TRUE或FALSE na表示缺失值 nan表示NOT A NUMBER infinite表示+-Inf 一定要亲手试x = 0/0,以及x = 1/0 >x <- NA > is.na(x) [1] TRUE

  • C语言实现两个矩阵相乘

    本文实例为大家分享了C语言实现两个矩阵相乘的具体代码,供大家参考,具体内容如下 程序功能:实现两个矩阵相乘的C语言程序,并将其输出 代码如下: #include "stdafx.h" #include "windows.h" void Multi(int * left, int * right, int * result, int f1, int f2, int s1, int s2); int main() { int i, j; int a[4][3] = {

  • R语言中向量和矩阵简单运算的实现

    一.向量运算 向量是有相同基本类型的元素序列,一维数组,定义向量的最常用办法是使用函数c(),它把若干个数值或字符串组合为一个向量. 1.R语言向量的产生方法 > x <- c(1,2,3) > x [1] 1 2 3 2.向量加减乘除都是对其对应元素进行的,例如下面 > x <- c(1,2,3) > y <- x*2 > y [1] 2 4 6 (注:向量的整数除法是%/%,取余是%%.) 3.向量的内积,有两种方法. 第一种方法:%*% > x

随机推荐