基本矩阵操作
1.矩阵和数组的概念及区别
矩阵基本操作:构建、改变维度与大小、索引、获取属性信息、改变结构
首先来区分行向量与列向量
1 2 3 4 5 |
>> A = [1,2,3,4] A = 1 2 3 4 |
其中逗号“,”可换成空格,其表示的是行向量
1 2 3 4 5 6 7 8 |
>> A = [1;2;3;4] A = 1 2 3 4 |
分号“;”表示的是列向量
注:数组的建立使用的是方括号[],而元组的建立用的是花括号{},切勿记混。
1 2 3 4 5 6 7 |
>> A = [1,2,3;4,5,6;7,8,9] A = 1 2 3 4 5 6 7 8 9 |
矩阵最早来自于方程组的系数以及常数所构成的方阵,这一概念是在19世纪被英国数学家凯利提出。
数组则是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按照序列排列的同类数据元素的集合称为数组。
在MATLAB中,按照数组元素的类型不同,可分为:数值数组、字符数组、单元数组、构造数组等。
在MATLAB中,矩阵和数组的区别在于:
- 矩阵是数学上的概念;数组是计算机程序设计领域的概念。
- 矩阵,作为变换或映射算符的体现,其有着明确而严格的数学规则;
- 数组,其规则为MATLAB软件定义,目的在于使数据管理方便、操作简单、命令形式自然、执行计算有效
在MATLAB中,矩阵和数组的联系在于:
- 在MATLAB中,矩阵以数组的形式存在。因此一维数组相当于向量,二维数组相当于矩阵。因此,矩阵是数组的子集。
2.矩阵的构造
矩阵构造方式有两种。第一种是直接构造,如上所示;另一种是利用MATLAB中的构造函数:
函数名称 | 函数功能 |
ones(m,n,…,p) | 构造一个m*n*…*p的1矩阵(元素全是1) |
zeros(m,n,…,p) | 构造一个m*n*…*p的0矩阵(元素全是0) |
eye(m,n) | 构造一个m*n的单位阵 |
magic(n) | 构造一个n*n的奇异矩阵(每一行每一列元素之和都相等) |
rand(m,n,…,p) | 构造一个m*n*…*p的矩阵,其元素为0~1之间均匀分布的随机数 |
randn(m,n,…,p) | 构造一个m*n*…*p的矩阵,其元素零均值、单位方差的正态分布随机数 |
diag(A,k) | 构建一个由矩阵A第k条对角线的元素组成的列向量。k属于整数 |
triu(A,k) | 构建一个和A大小相同的上三角矩阵。该矩阵第k条对角线及以上元素为A中对应元素,其余为0。k属于整数 |
tril(A,k) | 构建一个和A大小相同的下三角矩阵。该矩阵第k条对角线及以下元素为A中对应元素,其余为0。k属于整数 |
举例如下:
ones:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
>> Temp_1_1 = ones(2) Temp_1_1 = 1 1 1 1 >> Temp_1_2 = ones(3,2) Temp_1_2 = 1 1 1 1 1 1 |
zeros:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
>> Temp2_1 = zeros(2) Temp2_1 = 0 0 0 0 >> Temp2_2 = zeros(3,2) Temp2_2 = 0 0 0 0 0 0 |
eye:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
>> Temp_3_1 = eye(2) Temp_3_1 = 1 0 0 1 >> Temp_3_2 = eye(3,2) Temp_3_2 = 1 0 0 1 0 0 |
magic:
1 2 3 4 5 6 7 |
>> Temp_4 = magic(3) Temp_4 = 8 1 6 3 5 7 4 9 2 |
rand:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
>> Temp_5_1 = rand(3) Temp_5_1 = 0.6324 0.5469 0.1576 0.0975 0.9575 0.9706 0.2785 0.9649 0.9572 >> Temp_5_2 = rand(4,3) Temp_5_2 = 0.4854 0.9157 0.0357 0.8003 0.7922 0.8491 0.1419 0.9595 0.9340 0.4218 0.6557 0.6787 |
diag:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
>> Temp_6_1 = diag(Temp_5_1) Temp_6_1 = 0.6324 0.9575 0.9572 >> Temp_6_2 = diag(Temp_5_1,1) Temp_6_2 = 0.5469 0.9706 |
triu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>> Temp_7_1 = triu(Temp_5_1) Temp_7_1 = 0.6324 0.5469 0.1576 0 0.9575 0.9706 0 0 0.9572 >> Temp_7_2 = triu(Temp_5_1,2) Temp_7_2 = 0 0 0.1576 0 0 0 0 0 0 |
tril:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>> Temp_8_1 = tril(Temp_5_1) Temp_8_1 = 0.6324 0 0 0.0975 0.9575 0 0.2785 0.9649 0.9572 >> Temp_8_2 = tril(Temp_5_1,-1) Temp_8_2 = 0 0 0 0.0975 0 0 0.2785 0.9649 0 |
空矩阵:
1 2 3 4 5 |
>> Temp_9 = [] Temp_9 = [] |
注:矩阵默认数据类型为 double 类型的,在某些计算中有可能会出现数据类型不匹配的问题,因此需要搞清楚自己想要的结果是那种数据类型的,提前做好数据类型转换工作。具体转换方法在以后会讲到。
3.矩阵大小及结构的变换
- fliplr(A):矩阵每一行均进行逆序变换
- flipud(A):矩阵每一列均进行逆序变换
- flipdim(A,dim):生成在一个dim维矩阵A内的元素交换位置的多维矩阵
- rot90(A,k):生成一个由矩阵A逆时针旋转k×90°生成的新矩阵
- reshape(A,m,n):生成一个m×n×…×p维的矩阵,其元素以线性索引的顺序从矩阵A中取得
若A中没有m×n×…×p个元素,则返回错误
- repmat(A,[m,n,…,p]):创建一个和矩阵A相同元素的m×n×…×p块的多维矩阵
- shiftdim(A,n):矩阵的列移动n步。左正右负
- squeeze(A):返回没有空维的矩阵A
- cat(dim,A,B):将矩阵A和B组成一个dim维的多维矩阵
- permute(A,order):根据向量order来改变矩阵A的维数顺序
- ipermute(A,order):进行permute的逆变换
- sort(A):对一维或二维矩阵进行升序排列,并返回排序后的矩阵;
当A为二维矩阵时,对矩阵的每一列分别进行排序
- sort(A,dim):对矩阵按指定的方向进行升序排列,并返回升序后的矩阵。
dim = 1时,对矩阵的每一列排序;dim = 2时,对矩阵的每一行排序
以上函数较多,在此不列举实例。
4.矩阵的下标引用
双下标索引:
例:A(2,3)表示矩阵A中的第2行第三列元素。
单下标索引:
例:对于4×4矩阵A,A(5)表示第二行第一列元素。
索引转换:
双下标转单下标:sub2ind
举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
>> A = magic(5) A = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 >> IND = sub2ind(size(A),3,2) IND = 8 >> IND = sub2ind(size(A),3,3) IND = 13 |
由此可以看出,MATLAB中数组的排序方式是按列排序的。
单下标转双下标:ind2sub
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
>> [I, J] = ind2sub(size(A),10) I = 5 J = 2 >> [I, J] = ind2sub(size(A),23) I = 3 J = 5 |
转载请注明:燕骏博客 » MATLAB自学笔记(五):基本矩阵操作
赞赏作者微信赞赏支付宝赞赏