首页 > 其他分享 >基础知识(5) --Matlab中特殊符号使用总结

基础知识(5) --Matlab中特殊符号使用总结

时间:2022-09-28 16:38:39浏览次数:61  
标签:3.0000 5.0000 -- 6.0000 矩阵 Matlab && 特殊符号 2.0000

前言:上篇文章分享了Matlab经常会遇到(),[],与{}三种符号,下面接着捋一捋其他的特殊符号使用方法基础知识(5) --Matlab中特殊符号使用总结_数据,主要有


冒号

'

分号

&   &&


|      || 


~


.


基础知识(5) --Matlab中特殊符号使用总结_数组_02


1、:冒号

冒号的主要用途是用来表示数据从开始位置取到/生成到截止位置,例如:

>> x = 1:4  % 生成1到4的数据x =     1     2     3     4>> x(2:3)  % 提取x中2到3位置的数据ans =     2     3

x(i,j,k)的含义是第k层矩阵的第i行第j列元素,x(:,:,1)则表示第1层矩阵,比如:创建多维数组

A = [1 2 3; 4 5 6; 7 8 9]A(:,:,2) = [10 11 12;13 14 15;16 17 18]A(:,:,1) =     1     2     3     4     5     6     7     8     9A(:,:,2) =    10    11    12    13    14    15    16    17    18A(:,1,1)ans =     1     4     7

y=x(1,:),把x这个矩阵的第一行所有列赋给y。

注:冒号相当于所有。

在matlab中,a(:, 1:3)=[]表示将数组a的第1到第3列删除。

第一个冒号( : )表示取数组a的所有行;1:3表示取数组a的第1到第3列。


2:'分号

分号一般用于矩阵转置,其中A.'是一般转置,A'是共轭转置,顾名思义是对矩阵先做共轭运算(不懂共轭的自行百度),再进行转置,在A是实数矩阵时,两者没有区别,但是当A是复矩阵时,就有区别,示例如下:

A=[1 2 3;4 5 6]A1 2 34 5 6>>A.'ans1 42 53 6>> A'ans1 42 53 6>> a=[1+i 2+2i 3+3i;4+4i 5+5i 6+6i]a1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i4.0000 + 4.0000i 5.0000 + 5.0000i 6.0000 + 6.0000i>> a.'ans1.0000 + 1.0000i 4.0000 + 4.0000i2.0000 + 2.0000i 5.0000 + 5.0000i3.0000 + 3.0000i 6.0000 + 6.0000i>> a'ans1.0000 - 1.0000i 4.0000 - 4.0000i2.0000 - 2.0000i 5.0000 - 5.0000i3.0000 - 3.0000i 6.0000 - 6.0000i

另外补充一个conj(a)是求a的共轭矩阵,示例如下:

conj(a)ans =1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i4.0000 - 4.0000i 5.0000 - 5.0000i 6.0000 - 6.0000i


也就是说  

a.' = conj(a)'

启发思考

问:matlab中a(: ).'是什么意思?

答:a(:)作用是把矩阵a转换为列向量,就是一列,a(: ).'是把矩阵a转换为一个行向量,就是一行。

a(: ).'ans =  列 1 至 4   1.0000 + 1.0000i   4.0000 + 4.0000i   2.0000 + 2.0000i   5.0000 + 5.0000i  列 5 至 6   3.0000 + 3.0000i   6.0000 + 6.0000i

3、逻辑运算

3.1、"&&"与"&"

A&B

(1)首先判断A的逻辑值,然后判断B的值,然后进行逻辑与的计算。

(2)A和B可以为矩阵(e.g. A=[1 0],B=[0 0])。

A&&B

(1)首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。

(2)A和B不能是矩阵,只能是标量。

>> a = [1 0]a =     1     0>> b = [2 3]b =     2     3>> a & bans =  1×2 logical 数组   1   0>> a && b报错提示:||>> c1 = 0c1 =     0>> c2 = 1c2 =     1>> c1 & c2ans =  logical   0>> c2 = 3c2 =     3>> c1 = 3c1 =     3>> c1 & c2ans =  logical   1

A&&B 首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。这种用法非常有用,如果A是一个计算量较小的函数,B是一个计算量较大的函数,那么首先判断A对减少计算量是有好处的。另外这也可以防止类似被0除的错误:


flag=denum~=0 && num/denum>10

if flag

   %Do Something

end if

上面的表达式就可以防止denum等于0的情况。当然,如果你希望在判断的时候,对A和B表达式都进行计算,就应该使用标准的&或者|。Matlab中的if和while语句中的逻辑与和逻辑或都是默认使用short-circuit形式。

if flag=denum~=0 && num/denum>10

   %Do Something

end if

if flag=denum~=0 & num/denum>10

   %Do Something

end if


3.2、"||"与"|"

"||"与"|"的使用同"&&"与"&"


3.3、~

非(或逻辑非)是一元操作符,即~A:当A是非零时结果为“0”;当A为“0”时,结果为“1”.因此下列两种表示:

p | (~p)             结果为1

p & (~p)          结果为0

>> p = 1p =     1>> ~pans =  logical   0>> p = 2p =     2>> ~pans =  logical   0>> p = 0p =     0>> ~pans =  logical   1

额外小tips:

any和all函数在连接操作时很有用,设x是0-1向量,如果x中任意有一元素非零时,any(x)返回“1”,否则返回“0”;all(x)函数当x的所有元素非零时,返回“1”,否则也返回“0”.这些函数在if语句中经常被用到.如:

if all(A<7)     do somethingend


这种方式经常用来判断数组的数据是否满足特定要求。


4、.点

.点在matlab中主要用于矩阵元素计算,例如:乘是代表两个矩阵相乘,只要符合矩阵相乘的规则即可,而点乘对应的是矩阵中元素的相乘,在最新的Matlab上,不要求两个矩阵的维度一定要相同,老点的版本可能会报错,提示矩阵维度不相同。

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


老版本:

C=A.*B

错误使用  .* 

矩阵维度必须一致

新版本:

C=A.*BC =1     2     38    10    1221    24    27
A=[1 2 3;4 5 6;7 8 9];
B=[1 1 1;2 2 2;3 3 3];C=A.*BC = 1 2 3 8 10 12 21 24 27

 也就是说新版本的A.*B在矩阵非同维度的情况下,Matlab会自动补齐维度


标签:3.0000,5.0000,--,6.0000,矩阵,Matlab,&&,特殊符号,2.0000
From: https://blog.51cto.com/domi/5715885

相关文章

  • Matlab爬虫获取王者荣耀英雄皮肤
    前言:周末闲来无事,玩了几局王者荣耀,突发奇想怎么获取到王者荣耀里面的英雄皮肤,本期分享一下如何通过matlab爬虫批量提取王者荣耀的英雄皮肤关键字:王者荣耀、爬虫、Matlab首先......
  • C++问题汇总——长期更新
    避免使用vector<bool>,尽量使用bitset或者deque<bool>因为vector<bool>不是容器,底层是bool值按bit存储STLlist容器数据结构上看是带空头的双向循环链表容器迭代......
  • PAT (Basic Level) Practice 1003 我要通过
            最近主要在浙大PATOJ平台刷题,本篇主要分析1003题的求解思路和Python实现。1题目介绍1.题目背景        读入的字符串满足下列条件,系统就输......
  • 24. NumPy矩阵乘法
    1.前言矩阵乘法是将两个矩阵作为输入值,并将A矩阵的行与B矩阵的列对应位置相乘再相加,从而生成一个新矩阵,如下图所示:注意:必须确保第一个矩阵中的行数等于第二个矩阵中......
  • 数组找出单身狗经典问题
    前言单身狗问题是大厂近几年的一个热门考点,所以我们就一起来探讨一下吧!摘要单身狗的问题解法有很多种,今天我带给大家两种经典解法,一、数组比较法,二、异或法,这两种解法我会分......
  • 软件定义网络实验3
    这个作业属于哪个课程https://edu.cnblogs.com/campus/fzzcxy/FZUZCSDN202201这个作业要求在哪里https://edu.cnblogs.com/campus/fzzcxy/FZUZCSDN202201/homewo......
  • python 内置数据类型与方法
    序列类型包括列表、元组和范围(range)以及字符串,序列类型的对象有一些共同的操作,如操作符运算、切片操作等。1.list类型与操作1.1玩转索引列表(list)类型的对象可以通过li......
  • 通过Thread Pool Executor类解析线程池执行任务的核心流程
    摘要:ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态。本文分享自华为云社区《​​【......
  • build bcc failure with clang 10 on Ubuntu 20.04
    在ubuntu20.04的环境下,编译bcc项目,会存在undefinedreferenceto`getPollyPluginInfo()'的报错,/usr/bin/ld:/usr/lib/llvm-10/lib/libclangCodeGen.a(BackendUtil.cpp.o......
  • 翻了ConcurrentHashMap1.7 和1.8的源码,我总结了它们的主要区别。
    ConcurrentHashMap思考:HashTable是线程安全的,为什么不推荐使用?HashTable是一个线程安全的类,它使用synchronized来锁住整张Hash表来实现线程安全,即每次锁住整张表让线程独......