《MATLAB图像处理375例》——1.5 数组与矩阵

1.5 数组与矩阵

MATLAB图像处理375例
数值数组(简称为数组)是MATLAB中最重要的一种内建数据类型,是MATLAB软件定义的运算规则,其目的是为了数据管理方便、操作简单、指令形式自然和执行计算的有效。

1.5.1 数组的创建与操作
行数组:n个元素排成一行,又称为行向量。

列数组:m个元素排成一列,又称为列向量。

用方括号[ ]创建一维数组就是将整个数组放在方括号里,行数组元素用空格或逗号分隔,列数组元素用分号分隔,标点符号一定要在英文状态下输入。

【例1-3】创建数组示例。

clear all
A=[]
B=[7 3 4 3 2 1]
C=[7,5,4,3,2,1]
D=[7;3;4;3;2;1]
E=B' %转置

运行结果如下。

A =
   []
B =
   7   3   4   3   2   1
C =
   7   5   4   3   2   1
D =
   7
   3
   4
   3
   2
   1
E =
   7
   3
   4
   3
   2
   1

【例1-4】访问数组示例。

clear all
B=[2 2 3 3 2 2]
b1=B(1)%访问数组第一个元素
b2=B(2:3)%访问数组第2、3个元素
b3=B(3:end)%访问数组第3个到最后一个元素
b4=B(end:-2:2)%数组元素反序输出
b5=B([2 6])%访问数组第2、6个元素

运行结果如下。

B =
   2   2   3   3   2   2
b1 =
   2
b2 =
   2   3
b3 =
   3   3   2   2
b4 =
   2   3   2
b5 =
   2   2

【例1-5】对一子数组赋值。

clear all
A=[1 2 3 3 2 1]
A1(3) = 0
A2([2 4])=[2 2]

运行结果如下。

A =
   1   2   3   3   2   1
A1 =
   0   0   0
A2 =
   0   2   0   2

1.用冒号创建一维数组
在MATLAB中,通过冒号创建一维数组的方法如下。

x = a:b
x = a:inc:b

其中,a是数组x中的第一个元素,b不一定是数组x的最后一个元素。默认inc = 1。

【例1-6】用冒号创建一维数组示例。

clear all
A=3:6
B=3.2:2.5:6
C=3.2:-2.5:-6

运行结果如下。

A =
   3   4   5   6
B =
  3.1000  4.6000
C =
  3.1000  1.6000  0.1000  -1.4000  -2.9000  -4.4000  -5.9000

2.用logspace()函数创建一维数组
(1)x = logspace (a,b):创建行向量x,第一个元素为10a,最后一个元素为10b,形成总数为50个元素的等比数列。

(2)x = logspace (a,b,n):创建行向量x,第一个元素为10a,最后一个元素为10b,形成总数为n个元素的等比数列。

【例1-7】logspace()函数创建一维数组示例。

clear all
clc
format short;
A=logspace(1,4,3)
B=logspace(1,4,1)

运行结果如下。

A =
  1.0e+04 *
  0.0010  0.0316  1.0000
B =
    10000

3.用linspace()函数创建一维数组
(1)x = linspace (a,b) :创建行向量x,第一个元素为a,最后一个元素为b,形成总数为100个元素的等比数列。

(2)x = linspace (a,b,n) :创建行向量x,第一个元素为a,最后一个元素为b,形成总数为n个元素的等比数列。

【例1-8】用linspace()函数创建一维数组示例。

clear all
format short;
A = linspace(1,10)
B = linspace(1,12,3)

运行结果如下。

A =
 Columns 1 through 13
  1.0000  1.0909  1.1818  1.2727  1.3636  1.4545  1.5455  1.6364  1.7273  1.8182  1.9091  2.0000  2.0909
 Columns 14 through 26
  2.1818  2.2727  2.3636  2.4545  2.5455  2.6364  2.7273  2.8182  2.9091  3.0000  3.0909  3.1818  3.2727
 Columns 27 through 39
  3.3636  3.4545  3.5455  3.6364  3.7273  3.8182  3.9091  4.0000  4.0909  4.1818  4.2727  4.3636  4.4545
 Columns 40 through 52
  4.5455  4.6364  4.7273  4.8182  4.9091  5.0000  5.0909  5.1818  5.2727  5.3636  5.4545  5.5455  5.6364
 Columns 53 through 65
  5.7273  5.8182  5.9091  6.0000  6.0909  6.1818  6.2727  6.3636  6.4545  6.5455  6.6364  6.7273  6.8182
 Columns 66 through 78
  6.9091  7.0000  7.0909  7.1818  7.2727  7.3636  7.4545  7.5455  7.6364  7.7273  7.8182  7.9091  8.0000
 Columns 79 through 91
  8.0909  8.1818  8.2727  8.3636  8.4545  8.5455  8.6364  8.7273  8.8182  8.9091  9.0000  9.0909  9.1818
 Columns 92 through 100
  9.2727  9.3636  9.4545  9.5455  9.6364  9.7273  9.8182  9.9091  10.0000
B =
  1.0000  6.5000  12.0000

1.5.2 常见的数组运算
1.数组的算数运算
两个一维数组之间进行运算的要求如下。

(1)两个数组都为行数组(或都为列数组)。

(2)数组元素个数相同。

表1-2揭示了数组常用的运算格式。

【例1-9】数组加减法示例。

clear all
A=[2 7 6 8 7 6]
B=[9 75 6 7 4 0]
C=[2 2 2 2 2]
D=A+B       %加法
E=A-B       %减法
F=A*2

运行结果如下。

A =
   2   7   6   8   7   6
B =
   9  75   6   7   4   0
C =
   2   2   2   2   2
D =
  11  82  12  15  11   6
E =
  -7  -68   0   1   3   6
F =
   4  14  12  16  14  12

【例1-10】数组乘法示例。

clear all
A=[1 5 9 8 7 6]
B=[7 7 6 2 9 0]
C=A.*B          %数组的点乘
D=A*3           %数组与常数的乘法

运行结果如下:

A =
   1   5   9   8   7   6
B =
   7   7   6   2   9   0
C =
   7  35  54  16  63   0
D =
   3  15  27  24  21  18

【例1-11】数组除法示例。

clear all
A=[1 5 9 8 7 6]
B=[7 7 6 2 9 0]
C=A./B          %数组和数组的左除
D=A.\B          %数组和数组的右除
E=A./3          %数组与常数的除法
F=A/3

运行结果如下:

A =
   1   5   9   8   7   6
B =
   7   7   6   2   9   0
C =
  0.1429  0.7143  1.5000  4.0000  0.7778    Inf
D =
  7.0000  1.4000  0.6667  0.2500  1.2857     0
E =
  0.3333  1.6667  3.0000  2.6667  2.3333  2.0000
F =
  0.3333  1.6667  3.0000  2.6667  2.3333  2.0000

【例1-12】数组乘方示例。

clear all
A=[1 5 9 8 7 6]
B=[7 7 6 2 9 0]
C=A.^B        % 数组的乘方
D=A.^2        % 数组的某个具体数值的乘方
E=2.^A        % 常数的数组的乘方

运行结果如下。

A =
   1   5   9   8   7   6
B =
   7   7   6   2   9   0
C =
      1    78125   531441     64  40353607      1
D =
   1  25  81  64  49  36
E =
   2  32  512  256  128  64

通过函数dot可以实现数组的点积运算,该函数调用方法如下。

C=dot(A,B);
C=dot(A,B,DIM);

【例1-13】数组点积示例。

clear all
A=[1 5 9 8 7 6]
B=[7 7 6 2 9 0]
C=dot(A,B)           %数组的点积
D=sum(A.*B)          %数组元素的乘积之和

运行结果如下。

A =
   1   5   9   8   7   6
B =
   7   7   6   2   9   0
C =
  175
D =
  175

2.数组的关系运算
MATLAB中两个数之间的关系通常有6种描述:小于(<)、大于(>)、等于(==)、小于等于(<=)、大于等于(>=)和不等于(~=)。MATLAB 在比较两个元素大小时,如果表达式为真,就返回结果1,否则返回0。

【例1-14】数组的关系运算示例。

clear all
A=[1 5 9 8 7 6]
B=[7 7 6 2 9 0]
C=A<7             %数组与常数比较,小于
D=A>=7             %%数组与常数比较,大于等于
E=A<B             %数组与数组比较
F=A==B             %恒等于

运行结果如下。

A =
   1   5   9   8   7   6
B =
   7   7   6   2   9   0
C =
   1   1   0   0   0   1
D =
   0   0   1   1   1   0
E =
   1   1   0   0   1   0
F =
   0   0   0   0   0   0

1.5.3 矩阵的表示
MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。

对于数组的创建有如下4种方法。

(1)直接输入法。

(2)载入外部数据文件。

(3)利用MATLAB内置函数创建矩阵。

(4)利用M文件创建和保存数组。

下面将进行介绍。

1.直接输入法
最简单的建立矩阵的方法是从键盘直接输入矩阵的元素——将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。如果只输入一行,就形成一个数组(又称作向量)。

矩阵或数组中的元素可以是任何MATLAB表达式,可以是实数,也可以是复数。在此方法下创建矩阵需要注意以下规则。

(1)矩阵元素必须在“[ ]”内。

(2)矩阵的同行元素之间用空格(或“,”)隔开。

(3)矩阵的行与行之间用“;”(或回车符)隔开。

【例1-15】用两种直接输入的方法来创建矩阵。

C=[1 21 3;42 5 6;7 8 91]
D=[3  5  6;
  23 56 78;
  99 87  1]

运行结果如下。

C =
   1  21   3
  42   5   6
   7   8  91
D =
   3   5   6
  23  56  78
  99  87   1

2.载入外部数据文件
在MATLAB中,Load函数用于载入生成的包含矩阵的二进制文件,或者读取包含数值数据的文本文件。

文本文件中的数字应排列成矩形,每行只能包含矩阵的一行元素,元素与元素之间用空格分隔,各行元素的个数必须相等。

例如,用Windows自带的“记事本”或用MATLAB的文本调试编辑器创建一个包含下列数字的文本文件。

1 2 3 4 5 6 7 8 9 0

把该文件命名为data.txt,并保存在MATLAB的目录下。若需读取该文件,可在命令行窗口中输入:

>> load data.txt

系统将读取该文件并创建一个变量data,包含上面的这个矩阵。在MATLAB工作空间中可以查看这个变量。

【例1-16】读取数据文件trees。

clear all;
load trees         %读取二进制数据文件
image(X)          %以图像的形式显示数组X
colormap(map)        %设置颜色查找表为map

运行结果如图1-16所示。

读取数据文件trees,在工作空间会产生数组X,可以打开查看、编辑该数组。

3.利用MATLAB内置函数创建矩阵
在MATLAB中,系统内置特殊函数可以用于创建矩阵,通过这些函数,可以很方便地得到想要的特殊矩阵。系统内置创建矩阵的特殊函数,如表1-3所示。

【例1-17】利用几种系统内置特殊函数来创建矩阵。

Q1 = zeros(5,4)        % 产生5×4全为0的矩阵
Q2 = ones (5,4)        % 产生5×4全为1的矩阵
Q3 = eye (5,4)        % 产生5×4的单位矩阵
Q4= rand (5,4)        % 产生5×4的在(0,1)区间均匀分布的随机矩阵
Q5=randn(5,4)         % 产生5×4的均值为0、方差为1的标准正态分布随机矩阵
Q6=hilb(3)           % 产生3维的Hilbert阵
Q7 = magic(3)         % 产生3阶的魔方阵

运行结果如下。

Q1 =
   0   0   0   0
   0   0   0   0
   0   0   0   0
   0   0   0   0
   0   0   0   0
Q 2=
   1   1   1   1
   1   1   1   1
   1   1   1   1
   1   1   1   1
   1   1   1   1
Q3 =
   1   0   0   0
   0   1   0   0
   0   0   1   0
   0   0   0   1
   0   0   0   0
Q4= =
  0.9572  0.9157  0.8491  0.3922
  0.4854  0.7922  0.9340  0.6555
  0.8003  0.9595  0.6787  0.1712
  0.1419  0.6557  0.7577  0.7060
  0.4218  0.0357  0.7431  0.0318
Q5 =
  -1.0689  -0.7549  0.3192  0.6277
  -0.8095  1.3703  0.3129  1.0933
  -2.9443  -1.7115  -0.8649  1.1093
  1.4384  -0.1022  -0.0301  -0.8637
  0.3252  -0.2414  -0.1649  0.0774
Q6 =
  1.0000  0.5000  0.3333
  0.5000  0.3333  0.2500
  0.3333  0.2500  0.2000
Q7=
   8   1   6
   3   5   7
   4   9   2

4.利用M文件创建和保存矩阵
此方法需要用MATLAB自带的文本编辑调试器或其他文本编辑器来创建一个文件,代码和在MATLAB命令行窗口中输入的命令一样即可,然后以.m格式保存该文件。

【例1-18】把输入的内容以纯文本方式存盘(设文件名为matrix.m)。

A=[23 22 56;42 5 80;7 76 92]

在MATLAB命令行窗口中输入matrix:

>> matrix
A =
  23  22  56
  42   5  80
   7  76  92

运行该M文件,就会自动建立一个名为matrix的矩阵,以供日后使用。

1.5.4 寻访矩阵
在MATLAB中,矩阵寻访主要有下标寻访、单元素寻访和多元素寻访。

1.访问下标元素
MATLAB中的矩阵下标表示法与数学表示法相同,使用“双下标”,即分别表示行与列,矩阵中的元素都有对应的“第几行,第几列”。

除了双下标表示法,MATLAB还提供了一种线性下标表示法,又称“单下标”法,使用线性下标时,系统默认矩阵的所有元素按照列从上到下、行从左到右排成一列,只需要使用一个下标索引就可以定位矩阵中的任何一个元素。

在MATLAB还提供了用户下标计算函数:sub2ind用于双下标计算单下标,ind2sub用于单下标计算双下标,以方便不同下标之间的转换。

【例1-19】利用双下标提取矩阵元素。

format short
r=randn(3)
r11=r(1,1)       %r11
r22= r(2,2)      %r22
r33= r(3,3)      %r33

运行结果如下。

r =
  2.7694  0.7254  -0.2050
  -1.3499  -0.0631  -0.1241
  3.0349  0.7147  1.4897
r11 =
  2.7694
r22 =
  -0.0631
r33 =
  1.4897

【例1-20】创建一个矩阵,用单、双下标进行相应元素的访问,并将双下标计算单下标。

clear all;
A=[2 5 9 20;3 6 7 22;7 8 9 23;5 8 24 25]
A1=A(4,3)            %使用双下标访问A矩阵的第4行第3列的元素
A2=sub2ind(size(A), 4,3)     %双下标转换为单下标
A3= A(12)

运行结果如下。

A1 =
  24
A2=
  12
A3=
  24

2.访问单元素
MATLAB中,必须指定两个参数,即其所在行数和列数,才能访问一个矩阵中的单个元素。例如,访问矩阵M中的任何一个单元素。

M=(row,column) %row和column分别代表行数和列数

对矩阵的单元素进行访问。

【例1-21】对矩阵M进行单元素寻访。

M=randn(3)
x= M (1,2)
y= M (2,3)
z= M (3,3)

运行结果如下。

M =
  1.4090  -1.2075  0.4889
  1.4172  0.7172  1.0347
  0.6715  1.6302  0.7269
x =
  -1.2075
y =
  1.0347
z =
  0.7269

3.访问多元素
矩阵多元素的寻访,包括寻访该矩阵的某一行或某一列的若干元素,访问整行、整列元素,访问若干行或若干列的元素以及访问矩阵所有元素等。例如:

(1)A(e1:e2:e3)表示取数组或矩阵A的第e1元素开始每隔e2步长一直到e3的所有元素

(2)A ([mnl])表示取数组或矩阵A中的第(m, n, l)个元素。

(3)A (:,j)表示取A矩阵的第j列全部元素。

(4)A (i,:)表示A矩阵第i行的全部元素。

(5)A (i:i+m,:)表示取A矩阵第i~i+m行的全部元素。

(6)A (:,k:k+m)表示取A矩阵第k~k+m列的全部元素。

(7)A (i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素。

还可以利用一般向量和end运算符来表示矩阵下标,从而获得子矩阵。end表示某一维的末尾元素下标。

【例1-22】对创建的矩阵进行多元素访问。

Q=randn(4)
Q1=Q(1,:)          %访问第一行所有元素
Q2=Q(1:3,:)         %访问1~3行所有元素
Q3=Q(:,2)          %访问第二列所有元素
Q4=Q(:)           %访问所有元素

运行结果如下。

Q1 =
  0.3129  0.6277  0.0774  1.5326
Q2 =
  0.3129  0.6277  0.0774  1.5326
  -0.8649  1.0933  -1.2141  -0.7697
  -0.0301  1.1093  -1.1135  0.3714
Q3 =
  0.6277
  1.0933
  1.1093
  -0.8637
Q4 =
  0.3129
  -0.8649
  -0.0301
  -0.1649
  0.6277
  1.0933
  1.1093
  -0.8637
  0.0774
  -1.2141
  -1.1135
  -0.0068
  1.5326
  -0.7697
  0.3714
  -0.2256

1.5.5 矩阵的拼接
两个或者两个以上的单个矩阵,按一定的方向进行连接,生成新的矩阵就是矩阵的拼接。矩阵的拼接就是一种创建矩阵的特殊方法,区别在于基础元素是原始矩阵,目标是新的合并矩阵。

矩阵的拼接有按照水平方向拼接和按照垂直方向拼接两种。例如,对矩阵A和B进行拼接。

水平方向拼接:
C=[A B]
或
C=[A,B]
垂直方向拼接:
C=[A;B]。

【例1-23】把3阶魔术矩阵和3阶单位矩阵在水平方向上拼接成为一个新的矩阵,垂直方向上拼接成为一个新的矩阵。

clear all;
c= magic(3)       %3阶魔术矩阵
d = magic (3)      % 3阶单位矩阵
E =[c,d]         % 水平方向上拼接
F =[c;d]         % 垂直方向上拼接

运行结果如下。

c =
   8   1   6
   3   5   7
   4   9   2
d =
   8   1   6
   3   5   7
   4   9   2
E =
   8   1   6   8   1   6
   3   5   7   3   5   7
   4   9   2   4   9   2
F =
   8   1   6
   3   5   7
   4   9   2
   8   1   6
   3   5   7
   4   9   2

矩阵拼接时,必须满足原始矩阵维数对应,如果不满足条件,那么拼接不会成功,即出错。

【例1-24】非对应矩阵的拼接。

clear all;
a=[2 5 9;3 5 7]        %生成2×3阶矩阵
b=[2 5;3 7;8 2]        %生成3×2阶矩阵
c=[a b]            %矩阵的水平方向拼接
d=[a;b]            %矩阵的垂直方向拼接

运行的结果将会出错。

错误: 表达式或语句不完整或不正确。
在MATLAB中,除了使用矩阵拼接符[],还可以使用矩阵拼接函数执行。

(1)cat函数用于按指定的方向连接矩阵。其调用格式为:

C = cat(dim, A, B)

按照dim指定的方向连接矩阵A与B,构造出矩阵C。其中,dim用于指定连接方向。

C = cat(dim, A1, A2, A3, A4, ...)

A1, A2, A3, A4, ...表示被连接的多个矩阵。

(2)repmat函数用于通过输入矩阵的备份拼接出一个大矩阵。其调用格式为:

B = repmat(A,m,n)
或
B = repmat(A,[m n])

rempat函数建立一个大矩阵B,B是由矩阵A的备份拼接而成的,纵向摆m个备份,横向摆n个备份,B中总共包含m×n个A。A为被用来进行复制的矩阵,m为纵向上复制A的次数,n为横向上复制A的次数。

B = repmat(A,[m n p...])

repmat函数生成一个多维(m×n×p__×...)数组B,B由矩阵A的m×n×p__×...个备份在多个方向拼接而成。

当A为标量时,生成一个m×n矩阵(矩阵由指定数据类型的A的值组成)。对于某些值,使用其他函数也可以获得同样的结果。下面是某些值用不同函数得到同样结果的例子。

rempat(NaN,m,n)等价于NaN(m,n)。
rempat(single(inf),m,n)等价于inf(m,n,'single')。
rempat(int8(0),m,n)等价于zeros(m,n,'int8')。
rempat(uint32(1),m,n)等价于ones(m,n,'uint32')。
rempat(eps,m,n)等价于eps(ones(m,n))。
(3)horzcat函数用于对矩阵进行水平拼接。其调用格式为。

C = horzcat(A1, A2, ...)

水平连接多个矩阵A1,A2, ...,参数列表中的所有矩阵都必须有相同的行数。

horzcat函数连接n维数组是沿第二维(即行)的方向,因此被连接数组的第一维和其他维的大小必须匹配。

(4)vertcat函数用于垂直连接矩阵。其调用格式为。

C = vertcat(A1, A2, ...)

用于垂直连接多个矩阵A1,A2, ...,参数列表中的所有矩阵都必须有相同的列数。该函数连接n维数组是沿第一维(即列)的方向,因此被连接数组的其他维的大小必须匹配。当使用C=[A1;A2; ...]垂直连接矩阵时,实际上是调用C= vertcat(A1,A2, ...)函数。

(5)blkdiag函数用于通过输入的矩阵构造一个块对角矩阵。其调用格式为:

T = blkdiag(AB, C, D, ...)

blkdiag函数用输入的矩阵A, B, C, D, …构造一个块对角矩阵T。

【例1-25】利用cat函数拼接矩阵。

clear all;
A1=[1 1;3 4]
A2=[2 2;7 8]
C1=cat(1,A1,A2)       %垂直拼接
C2=cat(2,A1,A2)       %水平拼接
C3=cat(3,A1,A2)       %三维数组

运行结果如下。

A1 =
   1   1
   3   4
A2 =
   2   2
   7   8
C1 =
   1   1
   3   4
   2   2
   7   8
C2 =
   1   1   2   2
   3   4   7   8
C3(:,:,1) =
   1   1
   3   4
C3(:,:,2) =
   2   2
   7   8

【例1-26】使用rempat函数复制矩阵。

clear all;
B = repmat(magic(3),3,4)

运行结果如下。

B =
   8   1   6   8   1   6   8   1   6   8   1   6
   3   5   7   3   5   7   3   5   7   3   5   7
   4   9   2   4   9   2   4   9   2   4   9   2
   8   1   6   8   1   6   8   1   6   8   1   6
   3   5   7   3   5   7   3   5   7   3   5   7
   4   9   2   4   9   2   4   9   2   4   9   2
   8   1   6   8   1   6   8   1   6   8   1   6
   3   5   7   3   5   7   3   5   7   3   5   7
   4   9   2   4   9   2   4   9   2   4   9   2

【例1-27】建立9个1的矩阵。

N=repmat(1,[3,3])

运行结果如下。

N =
   1   1   1
   1   1   1
   1   1   1

【例1-28】利用horzcat函数建立一个3×5阶的矩阵A及一个3×3阶的矩阵B,然后进行水平连接。

clear all;
A = magic(5);          %5阶魔方矩阵
A(4:5,:) = []
B = magic(3)*10
C = horzcat(A, B)        %水平连接矩阵

运行结果如下。

A =
  17  24   1   8  15
  23   5   7  14  16
   4   6  13  20  22
B =
  80  10  60
  30  50  70
  40  90  20
C =
  17  24   1   8  15  80  10  60
  23   5   7  14  16  30  50  70
   4   6  13  20  22  40  90  20

【例1-29】利用vertcat函数对创建的A,B 矩阵进行垂直拼接。

clear all;
A = magic(4);
A(:, 3:4) = []           %创建一个4×2的矩阵A
B = magic(2)*10          %创建一个2×2的矩阵
C = vertcat(A,B)          %矩阵的垂直拼接

运行结果如下。

A =
  16   2
   5  11
   9   7
   4  14
B =
  10  30
  40  20
C =
  16   2
   5  11
   9   7
   4  14
  10  30
  40  20

【例1-30】利用blkdiag函数由矩阵A,B,C,D 构造一个块对角矩阵T。

clear all;
A=magic(2);
B=ones(2,2);
C=[1 2;3 4;5 6];
D=magic (3);
T=blkdiag(A,B,C,D)

运行结果如下。

T =
   1   3   0   0   0   0   0   0   0
   4   2   0   0   0   0   0   0   0
   0   0   1   1   0   0   0   0   0
   0   0   1   1   0   0   0   0   0
   0   0   0   0   1   2   0   0   0
   0   0   0   0   3   4   0   0   0
   0   0   0   0   5   6   0   0   0
   0   0   0   0   0   0   8   1   6
   0   0   0   0   0   0   3   5   7
   0   0   0   0   0   0   4   9   2

1.5.6 矩阵的运算
在MATLAB中,矩阵的运算包括+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)等运算。

1.矩阵的加减运算
两个矩阵相加或减是指有相同的行和列两矩阵的对应元素相加减。允许参与运算的两矩阵之一是标量(常量)。标量与矩阵的所有元素分别进行加减操作。

【例1-31】由A+B和A-B 实现矩阵的加减运算。

A=magic(3)
B =magic(3)
C=A+B
D=A-B

运行结果如下。

A =
   8   1   6
   3   5   7
   4   9   2
B =
   8   1   6
   3   5   7
   4   9   2
C =
  16   2  12
   6  10  14
   8  18   4
D =
   0   0   0
   0   0   0
   0   0   0

如果A与B 的维数不相同,那么MATLAB将给出错误信息,例如:

A=[5 4 6;8 9 7;3 6 4]
B=[9 1 7;5 6 6;5 6 8;7 9 8]
C=A+B
D=A-B

MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。

2.矩阵的乘除运算
假定有两个矩阵A和B,若A为m×n 矩阵,B为n×p 矩阵,则可以进行矩阵乘法的操作,即C=A*B为m×p 矩阵。矩阵乘法需要被乘矩阵的列数与乘矩阵的行数相等。

矩阵除法运算:\和/,分别表示左除和右除。A\B等效于A 的逆左乘B 矩阵,而B/A 等效于A 矩阵的逆右乘B 矩阵。左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。对于矩阵运算,一般_A\B≠
B/A。

【例1-32】矩阵乘法示例。

A=magic(3)
B=[9 1 7 1;5 6 6 2;5 6 8 3]
C=A*B

运行结果如下。

A =
   8   1   6
   3   5   7
   4   9   2
B =
   9   1   7   1
   5   6   6   2
   5   6   8   3
C =
  107  50  110  28
  87  75  107  34
  91  70  98  28

当矩阵相乘不满足被乘矩阵的列数与乘矩阵的行数相等时,例如:

A=[5 6;8 7;3 4]
B=[9 1 7 1;5 6 6 2;5 6 8 3]
C=A*B

则MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。

【例1-33】矩阵除法示例。

clear
A=magic(3)
B=[9 ;1 ;7];
C=A\B

运行结果如下。

C =
  1.6278
  0.2111
  -0.7056
时间: 2024-08-06 16:00:32

《MATLAB图像处理375例》——1.5 数组与矩阵的相关文章

《MATLAB图像处理375例》——第1章 数字图像与MATLAB基础 1.1 数字图像处理简介

第1章 数字图像与MATLAB基础 图像是客观对象的一种相似性的.生动性的描述或写真,是人类社会活动中最常用的信息载体.或者说图像是客观对象的一种表示,它包含了被描述对象的有关信息,是人们最主要的信息源. 1.1 数字图像处理简介 MATLAB图像处理375例 数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术. 1.1.1 什么是数字图像 图像有多种含义,其中最常见的定义是指各种图形和影像的总称.在理科的

《MATLAB图像处理375例》——2.2 三维绘图

2.2 三维绘图 MATLAB图像处理375例 在MATLAB中,三维绘图的基本流程包括以下9个步骤. (1)数据准备. (2)图形窗口和绘图区选择. (3)绘图. (4)设置视角. (5)设置颜色表. (6)设置光照效果. (7)设置坐标轴刻度和比例. (8)标注图形. (9)保存.打印或导出. 下面我们将根据绘制三维图形的基本流程,分别介绍创建图形的各种函数. 2.2.1 三维折线及曲线的绘制 在MATLAB中,plot3命令的功能及使用方法与plot命令的功能及使用方法类似,区别在于前者绘

《MATLAB图像处理375例》——1.7 字符串

1.7 字符串 MATLAB图像处理375例 字符串或串(String)是由数字.字母.下划线组成的一串字符.字符串在数据的可视化.应用程序的交互方面起到非常重要的作用,创建字符串时需要使用单引号将字符串的内容包括起来,字符串一般以行向量形式存在,并且每一个字符占用两个字节的内存. 1.7.1 创建字符串 [例1-47]创建字符串时,只要将字符串的内容用单引号包括起来即可,例如: a=126 class(a) size(a) b='125' class(b) size(b) 运行结果如下: a

《MATLAB图像处理375例》——1.3 MATLAB概述

1.3 MATLAB概述 MATLAB图像处理375例 MATLAB名字由MATrix和LABoratory两词的前三个字母组合而成.MATLAB以商品形式出现后的短短几年,就以其良好的开放性和运行的可靠性,使原先控制领域里的封闭式软件包纷纷淘汰,而改在MATLAB平台上重建.在国际上30几个数学类科技应用软件中,MATLAB在数值计算方面独占鳌头. 1.3.1 MATLAB的发展历程 20世纪70年代后期,时任美国新墨西哥大学计算机科学系主任的Cleve Moler教授出于减轻学生编程负担的动

《MATLAB图像处理375例》——第2章 MATLAB图形的可视化 2.1 二维绘图

第2章 MATLAB图形的可视化 MATLAB图像处理375例数据可视化是MATLAB一项重要的功能.MATLAB所提供的丰富绘图功能,使得工程科研人员从繁琐的绘图细节中脱离出来,并专注于最关心的本质.通过数据可视化的方法,工程科研人员可以对样本数据的分布.趋势特性有一个直观的了解. 2.1 二维绘图 MATLAB图像处理375例在MATLAB中绘制二维图形,通常采用以下步骤. (1)准备数据. (2)设置当前绘图区. (3)绘制图形. (4)设置图形中曲线和标记点格式. (5)设置坐标轴和网格

《MATLAB图像处理375例》——1.2 数字图像处理的研究内容

1.2 数字图像处理的研究内容 MATLAB图像处理375例 数字图像处理主要研究的内容有以下几方面. 1.2.1 图像变换 由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大,因此往往采用各种图像变换的方法,如傅里叶变换.沃尔什变换.离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不但可减少计算量,而且可获得更有效的处理(如傅里叶变换可在频域中进行数字滤波处理). 目前新兴研究的小波变换在时域和频域中都具有良好的局部化特性,在图像处理中也有着广泛而有效的应用.对添加噪声的图像

《MATLAB图像处理375例》——1.8 MATLAB程序流程控制结构

1.8 MATLAB程序流程控制结构 MATLAB图像处理375例 作为计算机语言,编程是必需的,编程靠的是程序控制语句.计算机语言程序控制模式主要有三大类:顺序结构.选择结构和循环结构.这一点MATLAB与其他编程语言完全一致. 1.8.1 顺序结构 顺序结构是指所有组成程序源代码的语句按照由上至下的次序依次执行,直到程序的最后一个语句.这种程序的优点是容易编制:缺点是结构单一,能够实现的功能有限. 在MATLAB语言的函数中,变量主要有输入变量.输出变量及函数内所使用的变量. (1)数据输入

《MATLAB图像处理375例》——1.10 小结

1.10 小结 MATLAB图像处理375例 本章首先介绍了MATLAB的产生和发展历程及其特点.接着讲述了桌面操作结构.变量及表达式.符号运算,以及MATLAB的基本数据结构.最后介绍了程序流程控制语句和查询帮助命令.希望读者仔细阅读,对MATLAB图像处理有一个轮廓性的大致了解,为后面核心技术与工程应用的学习做好铺垫.

《MATLAB图像处理375例》——1.9 查询帮助命令

1.9 查询帮助命令 MATLAB图像处理375例 MATLAB用户可以通过在命令行窗口中直接输入命令来获得相关的帮助信息,这种获取方式比联机帮助更为快捷.在命令行窗口中获取帮助信息的主要命令为help和lookfor以及模糊寻找,下面将介绍这些命令. 1.9.1 help命令 直接输入help命令,会显示当前的帮助系统中所包含的所有项目.需要注意的是用户在输入该命令后,命令行窗口只显示当前搜索路径中的所有目录名称.例如,在命令行窗口输入: >>help 帮助主题: toolbox\local