大数据矩阵计算基础(二):R、Excel、Matlab中矩阵操作

一、R语言

  • 构造矩阵

    a=matrix(c(1,2,3,4),ncol=2,byrow=T)
    b=matrix(c(5,6,7,8),ncol=2,byrow=T)
    c=matrix(c(1,2,3,4),ncol=2,byrow=F)

    function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) 
    data项为必要的矩阵元素,nrow为行数,ncol为列数,注意nrowncol的乘积应为矩阵元素个数,byrow项控制排列元素时是否按行进行,dimnames给定行和列的名称。

> rowname
[1] "r1" "r2" "r3"
> colname=c("c1","c2","c3","c4")
> colname
[1] "c1" "c2" "c3" "c4"
> matrix(1:12,nrow=3,ncol=4,dimnames=list(rowname,colname))
  c1 c2 c3 c4
r1 1 4 7 10
r2 2 5 8 11
  • 矩阵线性运算

    a+b:对应元素相加
    a-b:对应元素相减
    2*a:数与每个元素相乘
    a*b: 简单的对应元素相乘,注意不是矩阵相乘

  • 矩阵乘法

  • a%*%b:矩阵乘法(不懂矩阵乘法的百度)
  1. 若A为n×m矩阵,要得到A'B,可用函数crossprod(),该函数计算结果与t(A)%*%B相同,但是效率更高。
> A=matrix(1:12,nrow=4,ncol=3)
> B=matrix(1:12,nrow=4,ncol=3)
> t(A)%*%B
    [,1] [,2] [,3]
[1,]  30   70 110
[2,]  70  174 278
[3,] 110  278 446
> crossprod(A,B)
    [,1] [,2] [,3]
[1,]  30  70 110
[2,]  70 174 278
[3,] 110 278 446
  • 矩阵转置

    t(a)、t(b)

  • 取方阵的对角线元素

    diag(a)

  • 求方阵的迹

    在线性代数中,一个n×n矩阵A的主对角线(从左上方至右下方的对角线)上各个元素的总和被称为矩阵A(或迹数),一般记作tr(A)
    命令:sum(diag(a))

  • 构造对角矩阵

    c=diag(c(1,2,3,4))

    > diag(diag(A))
    
        [,1] [,2] [,3] [,4]
    
    [1,]   1   0   0   0
    
    [2,]   0   6   0   0
    
    [3,]   0   0   11   0
    
    [4,]   0   0   0   16
  • 矩阵求逆

    solve(a)
    矩阵求逆可用函数solve(),应用solve(a, b)运算结果是解线性方程组ax = b,若b缺省,则系统默认为单位矩阵,因此可用其进行矩阵求逆,

    > a=matrix(rnorm(16),4,4)
    
    > a
    
                [,1]     [,2]     [,3]     [,4]
    
    [1,] 1.6986019   0.5239738 0.2332094 0.3174184
    
    [2,] -0.2010667 1.0913013 -1.2093734   0.8096514
    
    [3,] -0.1797628 -0.7573283 0.2864535 1.3679963
    
    [4,] -0.2217916 -0.3754700 0.1696771 -1.2424030
    
    > solve(a)
    
                  [,1]     [,2]     [,3]     [,4]
    
    [1,] 0.9096360 0.54057479 0.7234861 1.3813059
    
    [2,] -0.6464172 -0.91849017 -1.7546836 -2.6957775
    
    [3,] -0.7841661 -1.78780083 -1.5795262 -3.1046207
    
    [4,] -0.0741260 -0.06308603 0.1854137 -0.6607851
    
    > solve (a) %*%a
    
                    [,1]       [,2]           [,3]       [,4]
    
    [1,] 1.000000e+00 2.748453e-17 -2.787755e-17 -8.023096e-17
    
    [2,] 1.626303e-19 1.000000e+00 -4.960225e-18 6.977925e-16
    
    [3,] 2.135878e-17 -4.629543e-17 1.000000e+00 6.201636e-17
    
    [4,] 1.866183e-17 1.563962e-17 1.183813e-17 1.000000e+00
  • 矩阵的行列式

  • det(a)
    det(b)
    det(c)

二、Excel(复杂不常用)

  • 定义矩阵名称
  • 矩阵加法
  • 矩阵减法
  • 矩阵数乘
  • 矩阵转置
    transpose
    Shift+Ctrl+Enter
  • 矩阵对应元素相乘
  • 矩阵乘法
    mmult
  • 矩阵的逆
    minverse
  • 矩阵的行列式
    mdeterm
  • 计算矩阵对应元素乘积之和
    sumproduct
    Shift+Ctrl+Enter

由于Excel矩阵操作比较复杂,描述起来比较麻烦,大家可以百度一下

三、Matlab

MATLAB(矩阵实验室)是MATrix LABoratory的缩写,是一款由美国The MathWorks公司出品的商业数学软件。 MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。除了矩阵运算、绘制函数/数据图像等常用功能外,MATLAB还可以用来创建用户界面及与调用其它语言(包括C,C++和FORTRAN)编写的程序。

MATLAB的意思是“矩阵实验室” ,因此它提供了许多创建矢量,矩阵和多维数组的便捷的方式。在MATLAB自己的语言中,一个矢量(vector)指的是一维(1×N或N×1)矩阵,在其他语言中通常被叫做数组(array)。 矩阵(matrix)通常指的是2-维数组,例如m×n数组其中m和n大于或等于1。多维数组通常指的是维数大于2的数组。

  • 第一个必须是英文字母,其组成可以是任意字母、数字、下划线,中间不可留空格、标点符号。
  • 最多只能有 63个字母,关键字和标准函数名不能用作变量。
  • 使用变量时,不需预先经过变量声明,而且所有数值变量均以预设的 double (双精度)形式储存。
  • MATLAB标准函数名必须用小写字母,所以建议定义变量、自编函数名时用小写字母。
  • 在matlab中,变量名是区分大小写的。
    特别提醒:在编程时,变量的命名是很有学问的,不要随便命名,养成变量命名的好习惯。

变量命名:

Matlab的系统预定义变量(Predefined variable),定义变量时,不要使用这些名称!

  • Ans 计算结果默认赋值变量
  • pi:圆周率(pi只能用小写字母)
  • Inf,inf:无穷大,如1/0
  • I,j 虚数单位
  • NaN,nan: not a number 非数,如0/0
  • eps:浮点运算相对精度 eps是一个函数,eps在matlab中叫做“浮点零”,也叫matlab中的零值 ,是一个非常非常小的数,但不是0。 在程序中的应用是防止分母为零。

矩阵创建

在MATLAB中创建矩阵有以下规则:

a、矩阵元素必须在”[ ]“内;
b、矩阵的同行元素之间用空格(或”,” )隔开;
c、矩阵的行与行之间用”;” (或回车符)隔开;
d、矩阵的元素可以是数值、变量、表达式或函数;
e、矩阵的尺寸不必预先定义。

1. 直接输入法

a=[1,2,3;4,5,6;7,8,9]

b=[1:1:3;4:1:6;7:1:9]

第一个值为起始值,中间为公差,最后为尾值

c=[linspace(1,3,3); linspace(4,6,3); linspace(7,9,3)]

第一个值为起始值,中间为尾值,最后为列数要保持一样不然会报错

例子如下:

2.利用MATLAB函数创建矩阵

(1)ones()函数:产生全为1的矩阵
ones(3)
ones(3,4)

(2) zeros()函数:产生全为0的矩阵;
zeros(3)
zeros(3,4)

(3) rand()函数:产生在(0,1)区间均匀分布的随机阵;
rand(3)
rand(3,4)

(4) eye()函数:产生单位阵;
eye(3)

(5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。
randn(3)
randn(3,4)

(6)生成对角矩阵
diag([1,2,3,4])
diag([1,2,3,4],1)

3.利用M文件来创建矩阵

4.大矩阵的建立

5.利用小矩阵构建大矩阵
e=[a;b]
f=[a,b]

合并注意维度一样

矩阵拆分

  • 寻值: a(2,2) 、 a(1,:) 、a(:,3) 、a(1:2,1:2) 、a(1,1:end) 、a(end,end)
    部分命令,原理都是一样

矩阵运算

  • a+d
  • a-d
  • 3*a
  • a*d
  • a^2
  • b=a^0.5

部分命令运行:

注意这里的矩阵乘法与R语言不通,牢记

  • 求矩阵的逆
    a=[5,7,1;6,8,9;1,9,7]
    inv(a)
  • 矩阵除法:
  • 求行列式
    det(a)
  • 求对角线元素
    diag(a)
    diag(a,1)
     (1为偏移量,向右上角偏移的位数,-便是向左下角)
  • 矩阵转置
    a’
  • 矩阵开方
    sqrt(a)
    a.^0.5

矩阵点运算

在MATLAB中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算,如:.*、 ./、 .\和.^。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。

  • a.*b
  • a.\b
  • a./b
  • a.^2
  • a.^0.5

矩阵关系运算

<(小于)、 <=(小于或等于)、 >(大于)、 >=(大于或等于)、 ==(等于)、~=(不等于)

  • a<b
  • a<=b
  • a>b
  • a>=b
  • a==b
  • a~=b
  • a>5
  • a>=5
  • a==5

例子:

找出a中大于5的元素位置
find(b>5)


按列算1 2 3 。。。找到相应的位置

产生3阶随机方阵A,其元素为[10,90]区间的随机整数,然后判断A的元素是否能被3整除。

A=fix((90-10+1)*rand(3)+10)
P=rem(A,3)==0

其他矩阵函数

  • 改变维数
    a=[1:12]
    reshape(a,3,4)
  • 旋转90度
    rot90(b)
  • 左右翻转
    fliplr(b) ; flipdim(b,2)
  • 上下翻转
    flipud(b) ; flipdim(b,1)
  • 上三角元素
    tril(c)
    tril(c,1)
  • 下三角元素
    triu(c)
    triu(c,-1)
  • 确定矩阵的维数
    size(b)
  • 求矩阵的迹
    trace(c)

 备注:尊重知识原创,转载请标明出处:http://blog.esouti.com/2018_02_04_562.html

猜你喜欢

转载自blog.csdn.net/byweiker/article/details/79254192