首页 > 其他分享 >【基础知识笔记】017 数组和矩阵的操作-上

【基础知识笔记】017 数组和矩阵的操作-上

时间:2023-02-01 22:58:16浏览次数:58  
标签:元素 矩阵 基础知识 数组 017 100 find 向量

数组是MATLAB数据进行存储和处理的基本形式。

矩阵是特殊形式的数组。数组与矩阵的操作是MATLAB语言的基础与特色所在

1. 数组(矩阵)的生成

1.1 直接生成

矩阵的生成可以通过在方括号[ ]中输入元素实现,不同行之间要用分号隔开,不同列用空格分开

ex

% 生成一个2×3矩阵
x=[1 2 3 ;4 5 6 ]

% 用冒号表达式
x1=[1:3;4:6]

1.2 函数生成数组/用特殊函数

% 函数生成数组/用特殊函数
x2=zeros(2,3)%2X3全零矩阵

x3=eye(3,3)%单位矩阵

x4=rand(3,3)%均匀分布随机矩阵

x5=randn(3,2)%正态分布随机矩阵

1.3 特殊函数

NB1vs.png

2. 行向量

利用冒号表达式可以产生行向量

一般格式:

e1:e2:e3

e1为初始值,e2为步长,e3为终止值。冒号表达式可产生一个由e1开始到e3结束、以步长e2自增的行向量

linspace函数产生行向量

格式:

linspace(a,b,n)

a和b是生成向量的第一个和最后一个元素,n是元素总数。当n省略时,自动产生100个元素。显然,linspace(a, b, n)与a:(b-a)/(n-1):b等价。

ex

%冒号expression
x6=0:100
x7=0:2:100
x8=linspace(0,100,101);%生成行向量
x9=0:100;
if x9==x8
    disp('linspace(0,100,101)等价于0:100')
end
x10=linspace(0,pi,10)

3.基本的数组操作

基本的数组操作包括

数组元素的寻址,查找和排序
对整个矩阵的转置、重排、拆分、连接和变换

3.1 数组元素的寻址

数组中包含多个元素,因此对数组的单个元素或多个元素进行访问操作时,需要对数组进行寻址操作。

在MATLAB中,数组寻址通过对数组下标的访问实现

MATLAB中提供end参数表示数组的末尾

MATLAB在内存中以列的方向保存二维数组,对于一个m行n列的数组,i、j分别表示行、列的索引,二维数组的寻址可表示为A(i,j);如果采用单下标寻址,则数组中元素的下标k表示为( j-1)*m+i

ex code

%一维数组的寻址
x11=randn(1,6);
x11(1,5)
x11(5)
if x11(5)==x11(1,5)
    disp('*****')
end

%二维数组的寻址
x12=randn(3,4)
x12(6)
x12(3,2)
if x12(6)==x12(3,2)
    disp('++++++')
end

3.2 元素查找

MATLAB提供数组查找函数find,它能够查找数组中的非零数组元素,并返回其在整个数组中的索引值

%find函数
ind=find(X)
%找出矩阵X中的所有非零元素,
%并将这些元素的线性索引值(linear indices:按列)
%返回到向量ind中。
%如果X是一个行向量,则ind是一个行向量;否则,ind是一个列向量
%如果X不含非零元素或是一个空矩阵,则ind是一个空矩阵。

ind=find(X,k)

ind=find(X,k,'first')

%返回第一个非零元素k的索引值。
%k必须是一个正数,但是它可以是任何数字数值类型

ind=find(X,k,'last')
% 返回最后一个非零元素k的索引值。
[i,j]=find(X,...)
返回矩阵X中非零元素的行和列的索引值。
这个语法对于处理稀疏矩阵尤其有用。

[i,j,v]=find(...)
%返回X中非零元素的一个列或行向量v,同时返回行和列的索引值。
%如果X是一个逻辑表示,则v是一个逻辑矩阵。
%输出向量v包含通过评估X表示得到的逻辑矩阵的非零元素

indices表示非零元素的下标值,
i、j分别表示行下标向量和列下标向量,
v表示非零元素向量

ex code

x13=[1 2 0 1;
     0 2 1 1;
     0 0 1 1];

ind1=find(x13);
[i,j]=find(x13)
length(i)
for n=length(i):-1:1
    plot(i(n),j(n),'*r')
    hold on;
    end
axis([0 5 0 5]);
grid on;
ind2=find(x13==2);
[i,j]=find(x13==2);

3.3 元素排序

sort()函数

B=sort(A)
B=sort(A,dim)
B=sort(...,mode)
[B,ix]=sort(...)

B为返回的排序后的数组,A为输入待排序数组,当A为多维数组时,用dim指定需要排序的维数(默认为1); mode为排序的方式,可以取值为ascend和descend,分别表示升序和降序,默认为升序;IX用于存储排序后的下标数组。

ex code


x14=[3 2 0;
    -5 0 7;
    0 0 1];
[i,j,v]=find((x14>2)&(x14<9))
% [i,j,v]=find(x14)
sort(x14,1,'descend') %dim=1,按照列的方向排序
x15=sort(x14,2) ;%dim=2,按照列的方向排序
[x15,ix]=sort(x14,1,'descend')

3.4矩阵转置

对矩阵A的转置为A'。

注意,当A为复数矩阵时,则A’表示共轭转置,如果要实现非共轭转置,则应采用A.'

code

%转置操作

x16=[100 200 300]
x16'

%复数矩阵的转置——共轭转置
x17=[1+1i,2+3i,1-2i]
x17'
%非共轭矩阵转置
x17.'

3.5 矩阵重排

code

%矩阵重排
x18=[1 2;
    3 4;
    5 6]
x19=[1,2;3,4;5,6]

x20=x19(:)

x21=reshape(x19,2,3)% 变换前后元素个数要一致

x22=zeros(2,2)
x22(:)=x19(2:5)

3.6 矩阵索引转换

%索引转换
x23=[1 2 3;
    4 5 6];

x23(3)
% ans =
%      2

%下标——subscript
%序号——index
%sub2ind(下标转序号)和ind2sub(序号转下标)函数
[i,j]=find(x23==3);%找到元素3的下标subscript
sub2ind(size(x23),i,j)%把下标转为序号index

%size(x23)返回矩阵x23的行数,列数[i,j]
%length(x23)为函数行数,列数的较大值,即max(size(x23))
ndims(x23)%ndims(x23)返回矩阵维数,二维数组
% ans =
%      2

1. 数组的运算

数组运算是指数组对应元素之间的运算,也称点运算

1.1 数值运算

  • 取随机数

利用取整和求余函数,可得到整数或精确到小数点后的第几位。

%生成随机数
x32=100-round(20*rand(1,1))%产生[-100 100 ]之间的随机整数

x32=100-round(20*rand(1,1))/100 %产生[-100 100 ]之间的随机数,精确到0.01

1.2 向量的点积叉积混合积

1.2.1 点积

向量的点积是指两个向量在其中某一个向量方向上的投影的乘积,通常可以用来引申定义向量的模

点积在数学中,又称数量积(dot product; scalar product),是指接受在实数R上的两个向量并返回一个实数值标量的二元运算。它是欧几里得空间的标准内积。 [1]

两个向量a = [a1, a2,…, an]和b = [b1, b2,…, bn]的点积定义为:

a·b=a1b1+a2b2+……+anbn

使用矩阵乘法并把(纵列)向量当作n×1 矩阵,点积还可以写为:

a·b=(a^T)*b,这里的a^T指示矩阵a的转置。

%点积计算
%dot()
dot(a, b)返回向量a和b的数量点积。a和b必须同维。当a和b都为列向量时,dot(a, b)同于a.*b。
dot(a, b, dim)返回向量a和b在维数为dim的点积

1.2.2 叉积

在高等数学中,向量的叉积表示过两相交向量交点的且垂直于两向量所在平面的向量。在MATLAB中,向量的叉积由cross函数来实现。

c=cross(a, b)返回向量a和b的叉积向量,即c=a×b。a和b必须为三维向量。

c=cross(a, b)返回向量a和b的前3位的叉积。

c=cross(a, b, dim)表示当向量a和b为n维数组时,返回a和b的dim维向量的叉积。a和b必须有相同的维数,且size(a, dim)和size(a, dim)必须为3。

c=cross(a,b)

1.2.3 混合积

dot()函数和cross()函数混用就行,顺序不能错

2.数组的保存和载入

MATLAB中提供了内置的把变量保存在文件中的方法,最简单易用的是将数组变量保存为二进制的.mat文件。用户可以通过save命令将工作区中指定的变量存储在.mat文件中。

  • save

save <filename> <var1> <var2>....

把变量存到filename.mat文件中

  • load

load <filename> <var1> <var2>....

把filename.mat中的变量加载到工作区

3.矩阵运算

3.1 加减

条件:
矩阵同型或者其中一个是标量

3.2 乘积

  1. 使用*运算符
  2. 其次,矩阵满足矩阵维数的条件:如果矩阵A是一个m×p矩阵,矩阵B是p×n矩阵,它们可以相乘产生m×n矩阵

在MATLAB里,单引号表示复共轭转置,一个点加单引号“.′”表示普通转置

3.3 矩阵除法

  • \”运算符号表示两个矩阵的左除,
  • “/”表示两个矩阵的右除

A\B即由Gauss消去法来获得线性方程AX=B的解X,即X=A-1B。如果矩阵不是方阵,也可以求出A\B,这时将使用最小二乘法来求取AX=B中的矩阵X。

X=B/A是X*A=B的解,对于非奇异方阵A, B/A等效为BA-1。

  • 左除

X=A\B就是A*X=B的解
  • 右除

X=B/A就是X*A=B的解
oxFxA.png

4.点运算

点运算符有.*、./、.\、.^。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维数相同

5.矩阵的指数和对数运算

MATLAB提供了两个专门的函数expm和logm来实现矩阵的指数运算和对数运算。

6.矩阵的乘方运算和开方运算

MATLAB中矩阵的乘方可以由符号“^”实现,而矩阵的开方则由sqrtm函数实现

标签:元素,矩阵,基础知识,数组,017,100,find,向量
From: https://www.cnblogs.com/aksoam/p/17084386.html

相关文章

  • 【基础知识笔记】021 三维数据可视化
    1-1曲线图绘制与二维绘图命令类似,在三维坐标下有三维的基本绘图命令plot3,其使用方法与plot相仿。plot3的调用格式如下。格式一:\(plot3(x,y,z)\)若\(x,y,z\)为相同......
  • 【基础知识笔记】020 二维数据可视化
    1.图形绘制基础1.1离散数据及离散函数一个二元实数标量对\((x_0,y_0)\)可以用平面上的点来表示,一个二元实数标量组\([(x_1,y_1)(x_2,y_2)…(x_n,y_n)]\)可以用平面上......
  • 【基础知识笔记】019 图形句柄
    图形句柄是对底层图形函数集合的总称,它实际上是进行图形生成的工作。这些函数一般隐藏于M文件内部,但是它们非常重要,因为程序员可以利用它们对图形的外观进行控制。1.句柄......
  • 【基础知识笔记】004 matlab-矩阵和数组的关系
    之前以为是两种东西,今天看了mathworks的官网才知道所有MATLAB量都是多维数组,与数据类型无关。矩阵是指通常用来进行线性代数运算的二维数组1.数组创建要创建每行包......
  • 【矩阵分析】笔记
    全书框架参考书目:《矩阵分析》刘丁酉第二章:线性空间与线性变换第三章:相似矩阵与Jordan标准形第四章:内积空间第五章:矩阵分解第六章:矩阵分析知识点1、奇异矩阵与......
  • EIGEN3矩阵库(转)
    类似Matlab的方式操作矩阵,可以在这里查看官方的与Maltab的对应关系,个人感觉单纯讲和Matlab的对应的话,可能不如Armadillo对应的好,但功能绝对强大。Eigen包含了绝大部分你能......
  • 一、playwright入门篇-基础知识
    一、playwright是什么?UI自动化的理解:定位元素--->操作元素---->断言根据定位元素方法不同,衍生出来不同的UI自动化框架:元素定位类型的:Selenium、Cypress、Appium、pla......
  • Java基础--简述JRE、JVM、JDK之间的关系与Java基础知识点
    JDK,JRE,JVM的特点JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。Java Runtime Environment(JRE)是运......
  • PostgreSQL学习笔记-4.基础知识:触发器、索引
    PostgreSQL触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。下面是关于PostgreSQL触发器几个比较重要的点:PostgreSQL触发器可以在BEFORE、AFT......
  • LeetCode:2319. 判断矩阵是否是一个 X 矩阵
    classSolution{public:boolcheckXMatrix(vector<vector<int>>&grid){intn=grid.size();boolflag=true;for(inti=0;i<n;......