语言基础2 矩阵和数组

news2024/11/15 3:27:43

语言基础2  矩阵和数组

矩阵和数组是matlab中信息和数据的基本表示形式    

可以创建常用的数组和网格  合并现有的数组  操作数组的形状和内容  以及使用索引访问数组元素    

用到的函数列表如下

 

一  创建 串联和扩展矩阵

矩阵时按行和列排列的数据元素的二维数据元素的二维矩形数组。

元素可以是数字、逻辑值、日期时间、字符串、categorical、或其他matlab数据类型

>> A=100;
>> whos A
  Name      Size            Bytes  Class     Attributes
  A         1x1                 8  double              

构建数据矩阵 

>> A=[12 62 93 -8]
A =
    12    62    93    -8
>> whos A
  Name      Size            Bytes  Class     Attributes
  A         1x4                32  double            

>> A=[12 62;93 -8]

A =

12 62
93 -8

专用矩阵函数

zeros(n1,n2)     n1行数    n2列数

ones(n1,n2)

>> zeros(2,3)
ans =
     0     0     0
     0     0     0
>> ones(2,4)
ans =
     1     1     1     1
     1     1     1     1

diag函数将输入元素放在矩阵的对角线上 

 
>> A = [12 62 93 -8];
B = diag(A)
B =
    12     0     0     0
     0    62     0     0
     0     0    93     0
     0     0     0    -8

串联矩阵

使用方括号来追加现有矩阵   此方法称为串联

>> A=ones(1,4);
>> B=zeros(1,4);
>> C=[A B]
C =
     1     1     1     1     0     0     0     0

串联多个矩阵 必须具有兼容的大小,水平串联矩阵时 行数必须相同,垂直串联矩阵,列数必须相同。

串联兼容矩阵的另一种方法时使用串联函数

horzcat   vertcat   cat

使用horzcat将第二个矩阵水平追加到第一个矩阵

>> D=horzcat(A,B)
D =
     1     1     1     1     0     0     0     0

使用vertcat将两个矩阵垂直连接

>> E=vertcat(A,B)
E =
     1     1     1     1
     0     0     0     0

生成数值序列

colon   创建由连续且等间距元素组成的矩阵的便捷方式。例如创建一个行向量 其元素是从1到10的整数

>> A=1:10      默认增量为1
A =
     1     2     3     4     5     6     7     8     9    10
>> A=-2.5:2.5  
A =
   -2.5000   -1.5000   -0.5000    0.5000    1.5000    2.5000
>> A=0:2:10      指定增量为2
A =
     0     2     4     6     8    10
>> A=6:-1:0      增量为负值    则递减   
A =
     6     5     4     3     2     1     0
>> A=1:0.2:2.1    增量为非整形值     如果增量值不能平均分指定的范围   则会在超出范围之前在可以达到的最后一个值处自动结束序列   此处最后为2
A =
    1.0000    1.2000    1.4000    1.6000    1.8000    2.0000

扩展矩阵

通过想一个或多个元素置于现有行和列索引边界之外,可以将他们添加到矩阵中    matlab会自动用0填充矩阵,使其保持为举行

例如创建一个2x3矩阵   然后在(3,4)的位置插入一个元素   使矩阵增加一行一列

>> A=[10 20 30;60 70 80]     %A 为2x3
A =
    10    20    30
    60    70    80  
>> A(3,4)=1     此时(1,3)(2,3) 两个位置为0   此时A为3x4
A =
    10    20    30     0
    60    70    80     0
     0     0     0     1

还可以通过现有索引范围之外插入新矩阵来扩展其大小

>> A(4:5,5:6)=[2 3;4 5]     执行完成后    A为5x6  矩阵   未赋值的索引位置填0
A =
    10    20    30     0     0     0
    60    70    80     0     0     0
     0     0     0     1     0     0
     0     0     0     0     2     3
     0     0     0     0     4     5

上例中   A(4,5)=2       A(4,6)=3        A(5,5)=4       A(5,6)=5 

 如果重复扩展矩阵的大小  例如在for循环中,最好要为预计创建的最大矩阵预分配空间,matlab必须在每次大小增加时分配内存,所以时间开销较大。

可以预先生成一个大的全0矩阵  

zeros(10000,10000)    行和列都是10000的矩阵

A=zeros(10000,10000)   如再大  需要再矩阵所以范围之外指定元素或将另一个预分配的矩阵与A串联来进行扩展

空数组

指至少有一个维度的长度等于零的数组  空数组可用于以编程方式表示“无”的概念

案例:

>> A=[1 2 3 4];
>> ind=find(A<0)
ind =
  空的 1×0 double 行向量

许多算法都包含可以返回空数组的函数调用  允许将空数组作为函数参数传递  而不是作为特殊情况处理。

需要自定义空数组的处理方式  可以使用isempty  函数来检查它们

TF=isempty(ind)

TF=logical

1   返回真值

数组索引

  根据元素在数组中的位置(索引)访问数组元素的方法主要有三种:按位置索引、线性索引和逻辑索引。

按元素的位置进行索引

  指定向量中的单个元素  : A(3,2)   行列式的方式   先给行号  再给列号

指定向量中的多个元素:A()

A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
a1=A(3,2)      %3行2列   索引对应的值     
a2=A(2,[1 3])    %A(2,1)      A(2,3)
a3=A(1:3,2:4)    %  访问第一到第三行、第二到第四列中的元素
a4=A(1:3,2:end)   %end为最后一列
a5=A(:,3)%:表示所有行或所有列    此处表示所有行的第3列 全部数据

输出:
A =
     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16
a1 =
    10
a2 =
     5     7
a3 =
     2     3     4
     6     7     8
    10    11    12
a4 =
     2     3     4
     6     7     8
    10    11    12
a5 =
     3
     7
    11
    15

通过索引来访问matlab中任何数组的元素  而不管其数据类型或维度如何   例如  直接访问datetime数组的列

datetime数组  

>> datetime(2018,1:5,1)   %详情参考 datetime()函数详情
ans = 
  1×5 datetime 数组
   2018-01-01   2018-02-01   2018-03-01   2018-04-01   2018-05-01
>> datetime(2018,1,1:5)
ans = 
  1×5 datetime 数组
   2018-01-01   2018-01-02   2018-01-03   2018-01-04   2018-01-05

使用单个索引进行索引

线性索引   实际上数据实际的存储方式都是按内存列式存储

>> A=[12 36 91;45 29 48;33 25 11]
A =
    12    36    91
    45    29    48
    33    25    11
>> Alinear=A(:)   %显示全部
Alinear =
    12
    45
    33
    36
    29
    25
    91
    48
    11
>> A(6)     按列序   定值
ans =
    25
>> A(3,2)   按二维数组坐标索引定值
ans =
    25

>> s=sum(A(:))
s =
330

sub2ind 和 ind2sub  函数可用于在数组的原始索引和线性索引之间进行转换    例如计算A的第3,2个元素的线性索引。

>> linearidx=sub2ind(size(A),3,2)     %  将行,列的形式转换为线性索引单列的形式   所以(3,2)对应单列为6     返回值为6
linearidx =
     6
>> [row,col]=ind2sub(size(A),6)       %  将单列的线性索引形式转换为行,列定位的形式    返回2个输出的变量  
row =
     3
col =
     2

使用逻辑值进行索引

使用true和false  逻辑指示符也可以对数组进行索引   在处理条件语句时尤其便利。

例如 假设想知道A中的元素是否小于另一个矩阵B中的对应元素

当A中的元素小于B中的对应元素时,小于号运算符返回元素为1的逻辑数组。

>> A=[1 2 6;4 3 6] 
A =
     1     2     6
     4     3     6
>> B=[0 3 7;3 7 5]
B =
     0     3     7
     3     7     5
>> ind=A<B         %判断A和B的各个对应元素   是否满足小于关系   是为1     否为0
ind =
  2×3 logical 数组
   0   1   1
   0   1   0

上例中得到了满足条件的元素的位置;

已经可以使用ind作为索引数组来检查各个值

matlab 将ind中值1的位置与A和B中的对应元素进行匹配,并在列向量中列出它们的值。

>> Avals=A(ind)  列出A中的值
Avals =
     2
     3
     6
>> Bvals=B(ind)   列出B中的值
Bvals =
     3
     7
     7

is函数还返回逻辑数组   指示输入中的哪些元素满足特定条件。

ismissing函数检查string向量中的哪些元素时缺失值。

>> str=["A" "B" missing "D" "E" missing];
>> ind=ismissing(str)    返回一个索引数组    对应值为1的索引位置的字符缺失  原字符数组中包含missing的索引位置为1  其余为0
ind =
  1×6 logical 数组   
   0   0   1   0   0   1

假设要查找非缺失值元素的值   将~运算符和索引向量ind结合使用即可实现此目的

>> strvals=str(~ind)                 %
strvals = 
  1×4 string 数组
    "A"    "B"    "D"    "E"

                               查找符合条件的数组元素

通过对数组应用条件来过滤数组元素。

检查矩阵中的偶数元素、查找多维数组中所有0值的位置,或者替换数据中的NaN值。

通过组合使用关系运算符和逻辑运算符来执行这些任务。

>   <   <=    ==    ~=       逻辑运算符   and   or    not 分别用&    |   ~表示   从而应用多个条件。

应用单个条件

rng default           创建一个5x5矩阵   元素为位于1和15之间的随机整数   
A=randi(15,5)     randi(imax,n)   返回5x5矩阵  其中包含从区间[1,imax]的均匀离散分布中得到的伪随机整数
A =
    13     2     3     3    10
    14     5    15     7     1
     2     9    15    14    13
    14    15     8    12    15
    10    15    13    15    11
>> B=A<9      使用小于号关系运算符  确定A中的哪些元素小于9     将结果存储在B中
B =
  5×5 logical 数组
   0   1   1   1   0
   0   1   0   1   1
   1   0   0   0   0
   0   0   1   0   0
   0   0   0   0   0     B为逻辑矩阵   每个值都表示为逻辑值的状态   符合的元素索引位置为1   否则为0 假
>> A(B)      B中不会指出这些元素的具体值是多少    但是可以使用B创建A的索引   从而得出满足条件的值
ans =        以列的形式展示出来
     2
     2
     5
     3
     8
     3
     7
     1

由于B为逻辑矩阵   所以上面的运算称为逻辑索引

有时某些问题需要符合条件的数组元素的位置信息  而非其实际值。

案例可以使用find函数来查找A中小于9的所有元素

>> I=find(A<9)
I =
     3
     6
     7
    11
    14
    16
    17
    22    返回的是一个由线型索引组成的列向量  每个索引描述A中一个小于9的元素的位置  因此实际上A(I)与A(B)返回的结果相同
差别为A(B) 使用逻辑索引    而A(I)使用线性索引

应用多个条件

使用and  or  not  运算符将任意多个条件应用于一个数组;条件的数量并不局限于一个或两个。

首先,使用逻辑and运算符  由&表示  指定两个条件:元素必须小于9且大于2     将这些条件指定为逻辑索引  以查看符合两个条件的元素。

>> A(A<9 & A>2)
ans =
     5
     3
     8
     3
     7

结果为A中同时符合这两个条件的元素的列表。

务必使用单独的语句指定每个条件,并用逻辑运算符连接起来。

例如:

不能通过A(2<A<9)指定以上条件,因为其计算结果为A(2<A|A<9).

接下来,查找A中小于9且为偶数的元素。

>> A(A<9&~mod(A,2))
ans =
     2
     2
     8   线型排序  列向     显示A中小于9的所有偶数元素的列表    使用逻辑NOT运算符~将矩阵mod(A,2)转换为逻辑矩阵
并在可被2整除的元素位置防止逻辑值1  true

案例2:

查找A中小于9   为偶数且不等于2的元素

>>  A(A<9&~mod(A,2)&A~=2)     返回具体的值
ans =
     8
>> find(A<9&~mod(A,2)&A~=2)    返回元素所在的位置   索引   线性索引
ans =   
    14                         即A(14)=8

替换符合条件的值

同时更改多个现有数组元素的值会很有用。将逻辑索引与简单的赋值语句一起使用,可替换数组中符合条件的值。

将A中所有大于10的所有值替换为数值10

>> A(A>10)=10
A =
    10     2     3     3    10
    10     5    10     7     1
     2     9    10    10    10
    10    10     8    10    10
    10    10    10    10    10
>> 
>> A(A~=10)=NaN           %将A中不等于10的所有值替换为NaN值
A =
    10   NaN   NaN   NaN    10
    10   NaN    10   NaN   NaN
   NaN   NaN    10    10    10
    10    10   NaN    10    10
    10    10    10    10    10
>> A(isnan(A))=0;       将A中所有NaN值替换为0   并应用逻辑NOT运算符 ~A
>> C=~A

C =
5×5 logical 数组
0 1 1 1 0
0 1 0 1 1
1 1 0 0 0
0 0 1 0 0
0 0 0 0 0

生成矩阵用逻辑值1 替代NaN值   用逻辑值0取代10   逻辑NOT运算~A将数值数组转换为逻辑数组,因此A&C返回逻辑值0 的矩阵    A|C返回逻辑值1的矩阵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/901599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OceanStore V3存储模拟器搭建教程

1 软件下载 软件地址&#xff1a;https://pan.baidu.com/s/12-5mZmq3cNiyC7J6KC0XxA?pwd1234 提取码&#xff1a;1234 2 软件安装 2.1 VMware软件安装 VMware软件安装请参考百度教程&#xff0c;注意事项如下&#xff1a; &#xff08;1&#xff09;软件安装前电脑需要开启虚拟…

2021年06月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:数对 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。 比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。 时间限制:1000 内存限制:65536 输入 一行,给出2到15个两两不同且…

第十章MyBatis的参数

单个简单参数处理 MyBatis中的sql语句中的属性 id&#xff1a;为mapper接口的方法名resultType&#xff1a;为返回参数的类型parameterType&#xff1a;为传递过来的参数类型&#xff0c;MyBatis会自动推断一般不用填写 javaType表示说明这个字段的java类型 jdbcType表示说明…

C++ 的关键字(保留字)完整介绍

1. asm asm (指令字符串)&#xff1a;允许在 C 程序中嵌入汇编代码。 2. auto auto&#xff08;自动&#xff0c;automatic&#xff09;是存储类型标识符&#xff0c;表明变量"自动"具有本地范围&#xff0c;块范围的变量声明&#xff08;如for循环体内的变量声明…

[python爬虫] 爬取图片无法打开或已损坏的简单探讨

本文主要针对python使用urlretrieve或urlopen下载百度、搜狗、googto&#xff08;谷歌镜像&#xff09;等图片时&#xff0c;出现"无法打开图片或已损坏"的问题&#xff0c;作者对它进行简单的探讨。同时&#xff0c;作者将进一步帮你巩固selenium自动化操作和urllib…

csapp archlab PartC满分解答

任务 修改ncopy.ys和pipe-full.hcl以尽可能的提高ncopy.ys的运行速度 思路 pipe-full.hcl&#xff1a; 实现iaddq指令&#xff08;家庭作业4.54&#xff09;实现加载转发&#xff08;家庭作业4.57&#xff09; ncopy.ys&#xff1a; 使用循环展开&#xff08;第5.8节&…

Python将本地文件上传到百度网盘

Python将本地文件上传到百度网盘 前言相关介绍Python将本地文件上传到百度网盘下载相关依赖库获取授权打开链接复制授权码粘贴授权码到终端&#xff0c;并回车连接到百度网盘 上传文件文件同步上传文件夹下载文件夹 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;…

Golang文件操作详解

打开和关闭文件 从 Go 1.16 开始,现在提供了相同的功能 通过包 IO 或包操作系统,以及这些实现 应该在新代码中首选。 有关详细信息,请参阅特定函数文档。 弃用了"io/ioutil"对文件的操作 读取文件方法一(os.open+file.read只读形式): os.Open() 函数能够打开…

攻防世界-Web_python_template_injection

原题解题思路 一说到python的web我就想到flask框架&#xff0c;但从没用过flask注入。 从零学习flask模板注入&#xff0c;这篇文章有详细的介绍。 经过尝试很快就能发现使用{{}}就能注入&#xff0c;并且会回显报错信息&#xff0c;3的位置是{{}}中语句的执行结果。 找可用的引…

T113-S3-LAN8720A网口phy芯片调试

目录 前言 一、LAN8720A介绍 二、原理图连接 三、设备树配置 四、内核配置 五、调试问题 总结 前言 在嵌入式系统开发中&#xff0c;网络连接是至关重要的一部分。T113-S3开发板搭载了LAN8720A系列的网口PHY芯片&#xff0c;用于实现以太网连接。在开发过程中&#xff0c…

STC15单片机PM2.5空气质量检测仪

一、系统方案 本设计采用STC15单片机作为主控制器&#xff0c;PM2.5传感器、按键设置&#xff0c;液晶1602显示&#xff0c;蜂鸣器报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化&#xff1a; void lcd_init()//液晶初始化设置 { de…

C#程序变量统一管理例子 - 开源研究系列文章

今天讲讲关于C#应用程序中使用到的变量的统一管理的代码例子。 我们知道&#xff0c;在C#里使用变量&#xff0c;除了private私有变量外&#xff0c;程序中使用到的公共变量就需要进行统一的存放和管理。这里笔者使用到的公共变量管理库划分为&#xff1a;1)窗体&#xff1b;2)…

熔断降级的理解和基于feign的熔断降级

什么是熔断降级&#xff1a; 在微服务保护中我们使用sentinel进行了熔断降级&#xff0c;熔断降级时为了防止雪崩效应&#xff0c;什么是雪崩效应&#xff0c;因为微服务是一层调用一层的&#xff0c;如果下面某一个微服务宕机了&#xff0c;就会导致全部的微服务宕机&#xf…

【欧拉计划】3或5的倍数

题目链接&#xff1a;3或5的倍数 解法一&#xff1a;暴力枚举 C语言代码 #include<stdio.h> int main (){int sum 0;for(int i 0;i<1000;i){if(i%30 || i%50)sum i;}printf("%d\n",sum);return 0; } //运行结果&#xff1a;233168上面这个解法的时间复杂…

回归预测 | MATLAB实现CSO-BP布谷鸟优化算法优化BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现CSO-BP布谷鸟优化算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现CSO-BP布谷鸟优化算法优化BP神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览…

【BUG】Docker启动MySQL报错

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

Java之继承详解二

3.7 方法重写 3.7.1 概念 方法重写 &#xff1a;子类中出现与父类一模一样的方法时&#xff08;返回值类型&#xff0c;方法名和参数列表都相同&#xff09;&#xff0c;会出现覆盖效果&#xff0c;也称为重写或者复写。声明不变&#xff0c;重新实现。 3.7.2 使用场景与案例…

基于STC15单片机-LM35-DS8B20温度测量-DS1302计时-proteus仿真-源程序

一、系统方案 本设计采用STC15单片机作为主控器。 DS18B20采集温度值送到液晶1602显示。 DS1302计时&#xff0c;日期送到液晶1602显示。 LM35采集另一路温度值送到数码管显示。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 /IO初始化为…

Azure应用程序网关

文章目录 什么是应用程序网关实战演练创建虚拟网络创建虚拟机创建应用程序网关测试搭建结果 什么是应用程序网关 Azure应用程序网关是一种托管服务&#xff0c;用于提供安全、可缩放的 Web 应用程序前端点的应用程序传送控制和保护。它可以通过 SSL 终止、cookie 基于会话持久…

adb devices存在连接emulator-5554怎么办

执行adb kill-server 发现还是有5554这条数据&#xff0c;可以采用window杀死端口号的方法。 netstat -ano | findstr 5554 &#xff0c;去查看pid是什么 得到pid&#xff0c;杀死这个pid taskkill /f /pid xxx