运算符、字符串及其他基础补充


 本篇博客继续MATLAB基础的学习,其实这篇博客可以和上篇合并在一起的,但感觉篇幅太长了,所以还是分成了两篇博客,这样子的学习总结效率也更高。

 MATLAB中的运算符,分为算术运算符、关系运算符以及逻辑运算符,这三种运算符具体的解释我觉得应该没啥好解释的,学过编程语言的都肯定知道。这三个运算符按优先级排序的话,算数运算符最高,关系运算符次之,最低级别的则是逻辑运算符。

算术运算符

 算术运算符,就是加减乘除那些,a+ba*ba-ba/ba^b这些应该很好理解,a.*b的话,直观上就是a与b对应的元素相乘(这里要求a和b是相同维度的矩阵)。a./b也很好理解,对应元素相除。a.^b则是a的每个元素的b次幂。

关系运算符

 <小于 >大于 ==等于 <=小于等于 >= 大于等于 ~=不等于。

逻辑运算符

 &与|或~非

 这里需要讨论的是,矩阵和矩阵是怎么进行逻辑运算的。进行逻辑运算的矩阵,必须有相同的维度,然后两个矩阵对应的元素进行逻辑比较,结果返回1或0值,所有元素比较下来,生成一个逻辑数组。

 其他的逻辑函数,比如xor(x,y),异或运算,x与有不同返回1,相同返回0。any(x)向量中有任何元素是非零,返回1,否则返回0;如果是矩阵,每一列中有非零元素返回1,否则返回0。all(x)这个则是要所有元素都是非零,才返回1,否则返回0。

字符串处理

  1. 字符串连接
>> str1 = 'how are you'

str1 =

    'how are you'

>> str2 = 'i am fine'

str2 =

    'i am fine'

>> str = strcat(str1,str2)

str =

    'how are youi am fine'

 构造多行字符串,如果写在[]内,则多行字符串的长度必须相同;如果写在{}内,则字符串长度可以不同。

>> b = ['abnormal','business','cat']

b =

    'abnormalbusinesscat'

>> a = {'abnormal';'business';'cat'}

a =

  3×1 cell 数组

    {'abnormal'}
    {'business'}
    {'cat'     }

>> a = ['abnormal';'business';'cat']
要串联的数组的维度不一致。

 当然,如果字符串之间的间隔改为逗号,则上述的程序不会报错。

>> a = strvcat('i','','am','','poppy')

a =

  3×5 char 数组

    'i    '
    'am   '
    'poppy'

>> a = char('i','','am','','poppy')

a =

  5×5 char 数组

    'i    '
    '     '
    'am   '
    '     '
    'poppy'

可以看到char函数会把空字符串也用空格补偿后在进行连接。

  1. 字符串比较
>> strcmp('china','catch')

ans =

  logical

   0

>> ('china' == 'catch')

ans =

  1×5 logical 数组

   1   0   0   0   0

 用关系运算符进行比较时,返回值是一个与字符串长度相同大小的数组,这时要求两个字符串长度必须相同。strcmp函数则无这一要求。

  1. 查找和替换

字符串查找

>> string = 'i am a soidor,put your hands up and dont move!'

string =

    'i am a soidor,put your hands up and dont move!'

>> findstr(string,' ')

ans =

     2     5     7    18    23    29    32    36    41

>> findstr(string,'o')

ans =

     9    12    20    38    43

字符串修改

>> string

string =

    'i am a soidor,put your hands up and dont move!'

>> strrep(string,'your','my')

ans =

    'i am a soidor,put my hands up and dont move!''

相关补充

  1. triu构造上三角矩阵,tril构造下三角矩阵。
>> a = triu(randn(4))

a =

    0.6715    0.4889    0.2939   -1.0689
         0    1.0347   -0.7873   -0.8095
         0         0    0.8884   -2.9443
         0         0         0    1.4384

>> a = triu(randn(4),2)

a =

         0         0   -0.8649    1.0933
         0         0         0    1.1093
         0         0         0         0
         0         0         0         0
>> tril(ones(4,5))

ans =

     1     0     0     0     0
     1     1     0     0     0
     1     1     1     0     0
     1     1     1     1     0

>> tril(ones(4,5),1)

ans =

     1     1     0     0     0
     1     1     1     0     0
     1     1     1     1     0
     1     1     1     1     1

squeeze函数去掉size中为的维度:

>> a = randn(3,1,2)

a(:,:,1) =

   -1.2141
   -1.1135
   -0.0068


a(:,:,2) =

    1.5326
   -0.7697
    0.3714

>> a = squeeze(a)

a =

   -1.2141    1.5326
   -1.1135   -0.7697
   -0.0068    0.3714
a =

   -1.2141    1.5326
   -1.1135   -0.7697
   -0.0068    0.3714

>> a(:) % 将a的每一列合并成一个长的列向量

ans =

   -1.2141
   -1.1135
   -0.0068
    1.5326
   -0.7697
    0.3714

文章作者: HANABI
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 HANABI !
评论
  目录