MATLAB:运算(二)
1. 改变矩阵结构
矩阵大小和结构可以改变,实现的方式主要有旋转矩阵、改变矩阵维度、删除矩阵元素等。MATLAB提供的此类函数见下表:
函数名称 | 函数功能 |
fliplr( A ) | 矩阵每一行均进行逆序排列 |
flipud( A ) | 矩阵每一列均进行逆序排列 |
flipdim(A, dim) | 生成一个在dim维矩阵A内的元素交换位置的多维矩阵 |
rot90( A ) | 生成一个由矩阵A逆时针旋转90°而得的新阵 |
rot90(A, k) | 生成一个由矩阵A逆时针旋转kX 90°而得到的新阵 |
reshape( A, m,n) | 生成一个m*n*…*p维的矩阵,其元素以线性索引的顺序从矩阵A中取得 |
repmat(A,[m…p]) | 创建一个和矩阵A有相同元素的m*n*…*p块的多维矩阵 |
repmat(x,[m…p]) | 创建一个m*n*…*p的多维矩阵,所有元素的值都为标量x |
shiftdim( A, n) | 矩阵的列移动n步。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时, 对每行排序 |
sort( A, dim, mode ) | mode为'ascend'时,进行升序排序: mode 为"'descend"时,进行降序排序 |
例:矩阵的旋转与维度的改变
在命令窗口输入:>> A=[1,2,3;4,6,8]
B=reshape(A,2,3)
C=fliplr(A)
D=rot90(A)
E=repmat(A,[1 2])
输出结果如下:
2. 矩阵下标
矩阵元素索引可分为双下标索引和单下标索引。
双下标索引通过两个下标对来对应元素在矩阵中的位置,例如A(2,3)表示矩阵A中第2行第3列的元素。
单下标索引通过一个下标对来对应元素在矩阵中的行列位置,其采用列元素优先的原则,对m行n列的矩阵按列排序进行重组,成为一位数组,再取新的一维数组中的元素位置作为元素在矩阵中的单下标。例如对于3x4的矩阵,A(3)表示矩阵A中第3行第1列的元素,A(7)表示矩阵A中第1行第3列的元素,而A(9)表示矩阵A中第3行第3列的元素。
下面介绍访问矩阵元素的具体方法。
矩阵下标引用
索引表达式 | 说明 |
A(i) | 将二维矩阵A重组为一维数组, 返回数组中第i个元素 |
A(:,i) | 返回二维矩阵A中第j列列向量 |
A(i,:) | 返回二维矩阵A中第i行行向量 |
A(:,j:k) | 返回由二维矩阵A中的第j列到第k列列向量组成的子阵 |
A(i:k,:) | 返回由二维矩阵A中的第i行到第k行行向量组成的子阵 |
A(i:k,j:1) | 返回由二维矩阵A中的第i-k行行向量和第j~1列列向量的交集组成的子阵 |
A(:) | 将矩阵A中的每列合并成一个长的列向量 |
A(j:k) | 返回一个行向量,其元素为A(:)中的第j个元素到第k个元素 |
A([j1j2...]) | 返回一个行向量,其中的元素为A(:)中的第j1、j2元素 |
A(:,[j1j2…]) | 返回矩阵A的第j1列、第j2列等的列向量 |
A([i1i2...J]:,) | 返回矩阵A的第i1行、第i2行等的行向量 |
A([i1i2...],[i1j2..]) | 返回矩阵第i1行、第i2行等和第j1列、第j2列等的元素 |
例:矩阵下标的引用示例。
在命令窗口输入:
>> M=magic(5),SubM=M(2:3,3:4),AM=M([7:816:18])
输出结果如下:
引用转换
矩阵中某一元素的单下标索引值和双下标索引值之间,可以通过sub2ind函数进行转换。
例:单双下标索引值转换。
在命令窗口输入:
>> ind=sub2ind([3 4],1,3),[I J]=ind2sub([34],7)
输出结果如下:
访问多个矩阵元素
例:访问多个矩阵元素示例。
在命令窗口输入:
>> A=magic(3)
A1=A(1:2:9)
A2=A(1:3,1:2)
输出结果如下:
3. 矩阵信息
矩阵信息主要包括矩阵结构、矩阵大小、矩阵维度、矩阵的数据类型及内存占用。
矩阵结构
矩阵结构是指矩阵子元素的排列方式。MATLAB提供了如表所示结构判断函数,这类函数的返回值是逻辑类型的数据:返回值为“1”表示该矩阵是特定类型的矩阵;否则,返回“0”。
函数名称 | 函数功能 |
isempty(A) | 判断矩阵是否为空 |
isscalar(A) | 判断矩阵是否是单元素的标量矩阵 |
isvector(A) | 判断矩阵是否指具有一行或一列的一维向量 |
isspatse(A) | 判断数组是否稀疏矩阵 |
例:矩阵结构判断函数的使用方法。
在命令窗口中输入:
输出结果如下:
矩阵大小
矩阵的形状信息通常包括:
矩阵的维数;
矩阵各维长度;
矩阵元素个数。
MATLAB提供了4个函数,分别获取矩阵形状以上三个方面的信息,见下表:
函数 | 调用格式 | 描述 |
ndims | nd=ndims(X) | 获取矩阵维数 |
size | [r,c]=size(X) | 获取矩阵各维长度 |
length | l=length(X) | 获取矩阵最长维长度 |
numel | n=numel(X) | 获取矩阵元素个数 |
例:矩阵形状信息查询函数的使用示例。
在命令窗口输入:
>> X=[magic(3) [1 1 1]']
nd=ndims(X)
[r,c]=size(X)
l=length(X)
n=numel(X)
输出结果如下:
矩阵维度
MATLAB将空矩阵、标量矩阵、一维矩阵和二维矩阵都作为普通二位数组对待,并提供ndims函数计算矩阵维度。
例:矩阵维度示例。
在命令窗口输入:
>> A=[];B=5;C=1:3;D=zeros(2);E(:,:,2)=[1 2;34];
Nd=[ndims(A) ndims(B) ndims(C) ndims(D) ndims(E)]
输出结果如下:
矩阵数据类型
矩阵的元素可以使用各种各样的数据类型,对应不同数据类型的元素,可以是数值、字符串、单元数组、结构等。
MATLAB中提供了一系列关于 数据类型的判断函数,如下表所示。这类函数的返回 值是逻辑类型数据:返回值为“1”表示是某一特定的数据类型: 返回值为“0”表示不是该特定的数据类型。
函数名称 | 函数功能 |
isnumeric | 判断矩阵元素是否为数值型变量 |
isreal | 判断矩阵元素是否为实数数值型变量 |
isfloat | 判断矩阵元素是否为浮点数值型变量 |
isinteger | 判断矩阵元素是否为整数型变量 |
islogical | 判断矩阵元素是否为逻辑型变量 |
ischar | 判断矩阵元素是否为字符型变量 |
isstruct | 判断矩阵元素是否为结构体型变量 |
iscell | 判断矩阵元素是否为元胞型变量 |
iscellstr | 判断矩阵元素是否为结构体的单元数组型变量 |