MATLAB 数据分析方法(第2版)1.4 数组和矩阵运算

简介:

1.4 数组和矩阵运算

 

矩阵是MATLAB数据存储的基本单元,矩阵运算是MATLAB语言的核心,在MATLAB语言系统中几乎一切运算都是以对矩阵的操作为基础的。

 

1.4.1 数组的创建与运算

 

1.数组的创建

 

在MATLAB中,一般使用方括号(\[\])、逗号(,)、空格、冒号(:)、函数命令等方法来创建数组,具体方法见表1-8。

 

 

 

表1-8 数组的创建方法

 

 

 

 

命令

用途

 

x=\[a,b,c,d\]

创建包含指定元素的数组

x=first:last

创建从first开始,加1计数,到last结束的数组

 

(续)

 

 

 

命令

用途

 

x=first:increment:last

创建从first开始,加increment计数,以last结束的数组

x=linspace(first,last,n)

创建从first开始,到last结束,有n个元素的数组

x=logspace(first,last,n)

创建从first开始,到last结束,有n个元素的对数分隔数组

x=\[y,z,1,2,3\]

y和z为数组,拼接y、z数组并扩展为更大的数组

  

 

 

2.数组元素的访问

 

访问一个元素:x(i)表示访问数组x的第i个元素。

 

访问一块元素:x(s:h:t)表示访问数组x的从第s个元素开始,以步长h到第t个(但不超过t)的这些元素,h可以为负数,h缺省时为1。

 

直接使用元素编址序号:x(\[a,b,c,d\])表示提取数组x的第a、b、c、d个元素构成一个新的数组\[x(a) x(b) x(c) x(d)\]。

 

3.标量与数组的运算

 

标量与数组的加、减、乘、除、乘方运算是数组的每个元素与该标量进行相应的加、减、乘、除、乘方运算。表1-9给出了标量与数组的运算法则。

 

 

 

表1-9 标量与数组的运算法则

 

 

 

 

表达式及其运算结果

运算结果说明

 

a+c=\[a1+c,a2+c,…,an+c\]即数组a的每个元素加上c

a*c或a.*c=\[a1*c,a2*c,…,an*c\]即数组a的每个元素乘以c

a/c或a./c=\[a1/c,a2/c,…,an/c\]即数组a的每个元素除以c

a.c=\[c/a1,c/a2,…,c/an\]即c除以数组a的每个元素

a.c=\[a1c,a2c,…,anc\]即数组a的每个元素的c次幂

c.a=\[ca1,ca2,…,can\]即以c为底,以a的每个元素为指数的幂

  

 

 

其中a=\[a1,a2,…,an\]是数组,c为标量。

 

4.数组与数组的运算

 

数组与数组的运算要求数组维数是相同的,其加、减、乘、除、幂运算可按元素对元素方式进行,不同维数的数组不能进行运算,其运算法则见表1-10。

 

 

 

表1-10 数组与数组的运算法则

 

 

 

 

表达式及其运算结果

运算结果说明

 

a+b=\[a1+b1,a2+b2,…,an+bn\]即数组a与b的对应元素相加

a.*b=\[a1*b1,a2*b2,…,an*bn\]即数组a与b的对应元素相乘

a./b=\[a1/b1,a2/b2,…,an/bn\]即数组a与b的对应元素相除

a.b=\[b1/a1,b2/a2,…,bn/an\]即数组b与a的对应元素相除

a.b=\[a1b1,a2b2,…,anbn\]即数组a与b的对应元素的幂

dot(a,b)=a1*b1+a2*b2+…+an*bn即数组a与b的数量积或称向量内积

  

 

 

其中a=\[a1,a2,…,an\],b=\[b1,b2,…,bn\]。

 

注意:数组的乘除法是指两个同维数组对应元素之间的乘除法,它们的运算符只能为“.*”、“./”或“.”,而表达式a*b、a/b、ab是没有意义的。

 

1.4.2 矩阵的输入与运算

 

1.矩阵的输入

 

1)直接输入法。从键盘直接输入矩阵的每一个元素。具体方法如下:将矩阵的所有元素用方括号括起来,在方括号内按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号或回车键分隔。例如:

 

>>A=\[2,3,5;1,3,5;6,9,4\]       %同一行元素之间用空格或逗号,行之间用分号或回车

 

A=

 

 2  3  5

 

 1  3  5

 

 6  9  4

2)外部文件读入法。MATLAB语言允许用户调用在MATLAB环境之外定义的矩阵,可以利用任意文本编辑器所编辑的矩阵。矩阵元素之间以特定分断符分开,并按行列布置。load函数用于调用数据文件,其调用方法为:load+文件名\[参数\]。

 

例如:事先在记事本中编辑以下数据,保存为文件data1.txt,文件放在当前目录下。

 

1  1   1

 

1  2   3

 

1  3   6

 

在MATLAB命令行窗口中输入:

 

>> load data1.txt

 

>> data1%显示数据

 

data1=

 

    1  1   1

 

    1  2   3

 

    1  3   6

load函数将会从文件名所指定的文件中读取数据,并将输入的数据赋给以文件名命名的变量。如果不给定文件名,则系统将自动认为MATLAB.mat文件为操作对象,如果该文件在MATLAB搜索路径中不存在,系统将会报错。

 

3)Excel电子表格数据读取。将Excel中的数据以矩阵的形式导入MATLAB中,可通过数据交换函数xlsread读取,xlsread函数语法:

 

data=xlsread('filename', 'sheet', 'range')

其中,filename是目标文件地址;sheet是数据表名称,例如Excel默认表名为sheet1;range是数据在表中的位置,如“$A1∶$C6”等。输出数值矩阵data。

 

例如,2015年9月1日到2016年3月18日,股票“中国银行”的交易数据保存在Excel文件“sh601988.xls”中,文件内容如表1-11所示。

 

 

 

表1-11 中国银行股票交易行情表

(单位:元)

 

 

 

日期

收盘价

最高价

最低价

开盘价

涨跌幅

 

2016/3/18

3.43

3.44

3.4

3.42

 0

2016/3/17

3.43

3.43

3.39

3.42

-0.2907

2016/3/16

3.44

3.44

3.37

3.37

 1.7751

2016/3/15

3.38

3.4

3.34

3.4

-0.5882

2016/3/14

3.4

3.43

3.37

3.39

 0

  …

  

注:书中凡是涉及数据保存在“***文件中”,我们将文件统一放在本书的网站上,供读者下载。

 

 

读取其中的数据可输入命令:

 

zgyh=xlsread('sh601988.xls','sheet1')

结果输出

 

zgyh =

 

3.43  3.44  3.40  3.42       0

 

3.43  3.43  3.39  3.42  -0.2907

 

3.44  3.44  3.37  3.37   1.7751

 

3.38  3.40  3.34  3.40  -0.5882

 

3.40  3.43  3.37  3.39      0

 

3.40  3.41  3.33  3.33  1.4925

 

……

 

(余下数据省略了!)

若读者对Microsoft Excel有一定的使用经验,可使用MATLAB Excel Builder实现MATLAB和Microsoft Excel的连接,从而实现两者数据的无缝接口。更详细的操作请参考有关文献。

 

2.特殊矩阵与符号矩阵

 

诸如单位矩阵、零矩阵、元素全为1的矩阵、魔方矩阵、范德蒙矩阵、希尔伯特矩阵、托普利兹矩阵、帕斯卡矩阵、服从特定分布的随机矩阵等,MATLAB提供了专门函数用于生成这些矩阵,参见表1-12。

 

 

 

表1-12 生成特殊矩阵的函数

 

 

 

 

命令函数

功能说明

 

A=eye(m,n)

生成一个m行、n列的单位矩阵A

B=zeros(m,n)

生成一个m行、n列的零矩阵B

C=ones(m,n)

生成一个m行、n列的元素全为1的矩阵C

D=magic(n)

生成n阶魔方矩阵D,D中的每行、每列及两条对角线上元素和相等

E=vander(v)

生成以向量v为基础向量的范德蒙矩阵E

F=hilb(n)

生成n阶希尔伯特矩阵F。矩阵F=(fij)n中的元素fij=(i+j-1)-1

G=pascal(n)

生成n阶帕斯卡矩阵G。帕斯卡矩阵由杨辉三角形表组成

H=rand(m)

生成m阶均匀分布的随机矩阵H

randn(m)

生成m阶正态分布的随机矩阵

  

 

 

符号矩阵是由MATLAB的符号运算产生的矩阵,可应用于行列式的计算公式推导。如:

 

syms x               %定义符号变量

 

f(x)=\[x x^2;1+x^3 2+x^4\];%定义符号矩阵

 

a=f(3);%将x用3替换得数值矩阵a

3.矩阵中元素或块操作

 

在MATLAB中,矩阵是基本的计算单元,有很多关于矩阵操作的函数。常用的有矩阵的扩展、块操作、转置、翻转、矩阵尺寸的改变等。对矩阵中元素或块操作见表1-13。

 

 

 

表1-13 矩阵中元素或块的常用操作

 

 

 

 

表达式或命令函数

功能说明

 

A(k,:)

提取矩阵A的第k行

A(:,k)

提取矩阵A的第k列

A(:)

依次提取矩阵A的每一列,将A拉伸为一个列向量

 

(续)

 

 

 

表达式或命令函数

功能说明

 

A(i1:i2,j1:j2)

提取矩阵A的第i1~i2行、第j1~j2列,构成新矩阵

A(\[a b c d\],:)

提取矩阵A的指定的第a、b、c、d行,构成新矩阵

A(:,\[e f g h\])

提取矩阵A的指定的第e、f、g、h列,构成新矩阵

A(i2:-1:i1,:)

以逆序提取矩阵A的第i1~i2行,构成新矩阵

A(:,j2:-1:j1)

以逆序提取矩阵A的第j1~j2列,构成新矩阵

A(i1:i2,:)=\[\]

删除A的第i1~i2行,构成新矩阵

A(:,j1:j2)=\[\]

删除A的第j1~j2列,构成新矩阵

\[A B\]或\[A;B\]

将矩阵A和B拼接成新矩阵

diag(A,k)

抽取矩阵A的第k条对角线元素向量

tril(A,k)

抽取矩阵A的第k条对角线下面的部分

triu(A,k)

抽取矩阵A的第k条对角线上面的部分

flipud(A)

矩阵A进行上下行翻转

fliplr(A)

矩阵A进行左右翻转

A’

矩阵A的转置

rot90(A)

矩阵A逆时针旋转90°

C=cat(DIM,A,B)

在DIM维度上拼接矩阵A与B,DIM=1或2或3

B=repmat(A,m,n)

把矩阵A当作元素,产生m行与n列的矩阵A组成的大矩阵B

K=kron(A,B)

由矩阵A与B产生卡诺矩阵K,即K=(aij*B),其中A=(aij)

B=reshape(A,m,n)

将矩阵A转换为m×n的矩阵

  

 

 

4.矩阵的运算

 

(1)矩阵间的运算

 

两个矩阵之间可按线性代数方法定义加、减、乘、除运算,还可定义同型矩阵间的按元素的点乘、点除、点幂运算,运算规则如表1-14。

 

 

 

表1-14 矩阵间的运算

 

 

 

 

表达式

功能说明

 

A+B(A-B)

A与B为同型矩阵,对应元素相加(减)

A*B

A的列数要等于B的行数,按代数学中定义的矩阵乘法法则计算

A/B

X=A/B是线性方程组XA=B的解。当A是可逆的矩阵时,A/B=A*B-1

AB

X=AB是线性方程组AX=B的解。当A是可逆的矩阵时,AB=A-1*B

A.*B

A与B为同型矩阵,对应元素相乘

A./B

A与B为同型矩阵,对应元素相除

A.B

A与B为同型矩阵,A中元素对应B中元素进行乘方运算

  

 

 

(2)矩阵与标量的运算

 

一个数与一个矩阵间的运算规则如表1-15。

 

 

 

表1-15 矩阵与标量的运算

 

 

 

 

表达式

功能说明(设A为矩阵,c为标量)

 

A+c(A-c)

A中每个元素加(减)常数c

A*c(c*A)

A中每个元素乘常数c

A/c

A中每个元素除常数c

 

(续)

 

 

 

表达式

功能说明(设A为矩阵,c为标量)

 

c./A

常数c分别被A中对应每个元素相除

c.A

常数c对应于A中每个元素的乘方运算

A.c

对应于A中每个元素对应常数的c次乘方运算

Ac

A是方阵,当c大于0时表示矩阵的方幂,当c小于0时表示A逆的方幂

  

 

 

(3)矩阵的基本函数运算 

 

矩阵的函数运算是矩阵运算中最实用的部分,常用的主要有以下几个,见表1-16。

 

 

 

表1-16 矩阵的函数运算命令

 

 

 

 

命令

功能

 

det(A)

方阵A的行列式

inv(A)

方阵A的逆矩阵

\[m,n\]=size(A)

给出A的行列数,输出A的行数m、列数n

\[v,d\]=eig(A)

A的特征向量v及特征值为对角元的对角矩阵d

orth(A)

可逆矩阵A的列向量组正交规范化

rref(A)

矩阵A的阶梯形的行最简形式

rank(A)

矩阵A的秩

trace(A)

矩阵A的迹

\[Q,R\]=qr(A)

矩阵A的Q,R分解,即正交矩阵Q和上三角阵R满足A=QR

\[p,H\]=hess(A)

海森伯格分解,即正交矩阵p与拟上三角阵H满足A=pHp’

  

 

 

(4)矩阵的数据处理

 

MATLAB具有强大的数据处理功能,如数据的排序、求最大值、求和、求均值等。常用数据处理的命令见表1-17。

 

 

 

表1-17 常用数据处理命令

 

 

 

 

命令

功能

命令

功能

 

 

max(A)求向量或矩阵每列的最大值

mean(A)求向量或矩阵每列的平均值

sum(A)求向量或矩阵每列的元素和

var(A)求向量或矩阵每列的方差

cov(A)矩阵列向量之间的协方差矩阵

length(A)求向量所含元素个数

 

 

 

min(A)求向量或矩阵每列的最小值

median(A)求向量或矩阵每列的中位数

prod(A)求向量或矩阵每列的元素乘积

std(A)求向量或矩阵每列的标准差

corrcoef(A)矩阵列向量间的相关系数矩阵

find(A)求向量中满足条件的元素  

 

 

5.多维数组

 

在MATLAB中可以创建高维数组。习惯上二维数组中的第1维称为“行”,第2维称为“列”,二维数组可视作“矩形面”。三维数组是二维数组的扩展,用三个下标表示,在二维数组的基础上增加了一维称为“页”,三维数组可视作“长方体”。在MATLAB中将三维及三维以上的数组统称为高维数组。

 

创建三维数组的方法有以下几种。

 

1)按“页”创建。

 

A(:,:,1)=\[1,2,3;4,5,6;7,8,9\];       %创建数组A的第1页

 

A(:,:,2)=8;%创建数组A的第2页,每个元素赋值为8

2)由函数ones、zeros、rand直接创建。

 

>>A=rand(2,3,2)%创建A为2行、3列、2页的数组

 

A(:,:,1) =

 

   0.8147  0.1270  0.6324

 

   0.9058  0.9134  0.0975

 

A(:,:,2) =

 

   0.2785  0.9575  0.1576

 

   0.5469  0.9649  0.9706

3)由函数cat、repmat、reshape生成数组。

 

>>a=\[1 2;3 4\];

 

>>b=\[5 6;7 8\];

 

>>c=cat(3,a,b)%沿着第3维创建c为2行、2列、2页的数组

三维数组的元素的存取操作可类似于二维数组采用下标法。

 

6.元胞数组

 

元胞数组是MATLAB的一种特殊数据类型,每个元素以单元的形式存在。在MATLAB中,采用大括号“{}”或函数cell建立元胞数组。在获取元胞数组的元素时,采用大括号表示下标,如下列程序中a{1,1}表示元胞数组中第一行、第一列的元胞。

 

clear all;

 

a={\[1 2 3;4 5 6;7 8 9\],20;ones(2,3),1:10}%创建元胞数组a

 

b=a{1,1}%从元胞数组中读取元素a{1,1},该元素为矩阵赋给b

 

c=a{2,2}(3)%从元素a{2,2}读取第三个数据a{1,1}(3)

 

a{1,2}=magic(3)%给元素a{1,2}重新赋值为一个三阶魔方矩阵

程序运行结果:

 

a =

 

  \[3x3 double\]  \[     20\]

 

  \[2x3 double\]  \[1x10 double\]

 

b =

 

  1   2   3

 

  4   5   6

 

  7   8   9

 

c =

 

  3

 

a =

 

  \[3x3 double\]  \[3x3 double\]

 

  \[2x3 double\]  \[1x10 double\]

在数据分析中,将不同维数与大小的矩阵作为元胞放在一个元胞数组中,这样有利于数据的调用,提高了工作效率。例如在回归分析、神经网络建模中,都大量地使用了元胞数组。

相关文章
|
1月前
|
数据可视化 数据挖掘 数据管理
问卷调查数据分析指南!掌握方法,精准把握用户需求!
本文介绍了如何利用自定义报表、交叉报表和过滤器进行问卷调查数据分析。文章首先区分了定量和定性数据,强调了定量数据在分析中的重要性,并列举了客户体验(CSAT、CES、NPS)和市场调研的关键指标。接着,提到了定性数据分析方法,如情感分析和词云图。文章还讨论了自定义报表、交叉报表和过滤器在数据筛选和相关性探索中的作用,以及收集器在多源数据收集上的应用。最后,强调了仪表板在数据可视化和比较中的优势,并推荐了Zoho Survey作为综合的数据管理平台。
51 0
问卷调查数据分析指南!掌握方法,精准把握用户需求!
|
1月前
|
数据可视化 数据挖掘 Linux
Python数据分析(四)——plot方法
Python数据分析(四)——plot方法
|
2月前
|
搜索推荐 数据挖掘 C++
数据分析方法-对比分析和用户画像
数据分析方法-对比分析和用户画像
70 1
数据分析方法-对比分析和用户画像
|
3月前
|
机器学习/深度学习 数据采集 存储
基于振弦采集仪的工程监测数据分析方法研究
基于振弦采集仪的工程监测数据分析方法研究主要涉及以下几个方面:
基于振弦采集仪的工程监测数据分析方法研究
|
4月前
|
算法
MATLAB求解线性方程组的八种方法
求解线性方程分为两种方法--直接法和迭代法 常见的方法一共有8种 直接法 Gauss消去法 Cholesky分解法 迭代法 Jacobi迭代法 Gauss-Seidel迭代法 超松弛迭代法 共轭梯度法 Bicg迭代法 Bicgstab迭代法
130 0
|
4月前
|
供应链 搜索推荐 数据挖掘
数据分析方法与模型
数据分析方法与模型
|
3月前
|
算法 5G PHP
基于范数求解缩放因子方法的MIMO系统预编码技术matlab仿真
基于范数求解缩放因子方法的MIMO系统预编码技术matlab仿真
|
4月前
|
机器学习/深度学习 数据采集 运维
重要的数据分析方法:时间序列分析
重要的数据分析方法:时间序列分析
110 1
重要的数据分析方法:时间序列分析
|
5月前
|
数据采集 数据可视化 BI
matlab数学建模方法与实践 笔记2:数据的准备
matlab数学建模方法与实践 笔记2:数据的准备
82 0
|
1月前
|
SQL 机器学习/深度学习 NoSQL
常用的数据分析方法和工具有哪些?
随着大数据时代的到来,数据分析也逐渐成为了各企业、组织以及个人的必要技能之一。但是数据分析在进行过程中,我们往往会遇到各种各样的问题,比如面对不同类型的数据,如何进行有效的分析?今天和大家分享一些常见的数据分析方法和工具,希望对大家有所帮助。

热门文章

最新文章