juaner's Blog

千里之行,始于足下。

数值与矩阵

一、矩阵

1、matlab有两个特殊数值:inf和NaN。matlab中用inf和-inf来表示正无穷大和负无穷大。除法运算中除数为0或者运算结构溢出都会导致inf或者-inf的结果。用NaN表示一个既不是实数也不是复数的数值。是 Not a Number的缩写。类似0/0、inf/inf得到的都是NaN。

2、字符串用单引号来表示。

3、函数句柄是用来提供间接调用函数的数据类型,函数句柄可以传递给其他函数以便该函数句柄所代表的函数可以被调用。函数句柄还可以被存储起来,以便以后利用。用符号@后面跟着函数名来表示。例如:

 fhandle=@sin;fhandle(0);ans=0.

4、matlab的矩阵中分号是用来分隔列的,逗号是用来分隔行的。也就是说行矩阵用逗号分隔,列矩阵用分号分隔。

5、rand()是以机器时间为随机种子的,每次运行的结果都不一样。

6、构造向量的时候,:一般表示步长为1。也可产生任意定义步长的向量。特殊的两个函数是linspace(-6,6,4)和logspace()函数。前者是产生等距向量,后者是创建对数等距的向量。

7、矩阵的合并,表达式C=[A B]在水平方向合并矩阵,C=[A;B]在竖直方向合并矩阵。

8、矩阵合并函数:

  1. cat,在指定的方向合并矩阵,cat(DIM,A,B),cat(2,A,B),cat(1,A,B);
  2. horzcat,在水平方向合并矩阵,格式为horzcat(A,B);
  3. vertcat,在竖直方向合并矩阵,格式为vercat(A,B);
  4. repmat,通过复制矩阵来构造新的矩阵,格式为B=repmat(A,M,N),得到MXN个A的大矩阵。
  5. blkdiag,用已知矩阵来构造块对角化矩阵,格式为Y=blkdiag(A,B,...)。

9、删除矩阵的某一行,使某一行为空即可,使用A(2,:)=[ ]; 同理删除某一列A(:,2)=[ ]。A(1,i)表示第一行的所有元素。

10、引用矩阵元素的时候用的是A(i,j)。引用矩阵元素也可以使用线性方法,已知矩阵的下标可以用函数sub2ind()来得到线性引用的下标。用法如:linearindex=sub2ind(size(A),3,2);反过来为[row col]=ind2sub(size(A),6)。

11、冒号本身可以表示一列或者一行的所有元素,一列元素可以写为:A(:,j)。end表示最后一个元素。

12、矩阵尺寸函数有:n=length(X)表示矩阵最长方向的长度,n=ndims(X)表示矩阵的维数,n=numel(X)表示矩阵的元素个数。d=size(X),返回的大小信息以向量方式存储,[m,n]=size(X)返回的大小信息分开存储,m=size(X,dim)返回某一维的大小信息。

13、获得数据类型的信息:如:ischar(A),isfloat(A)等等。

14、判断矩阵的结构,如:isempty(A),issparse(A)等等。

15、矩阵结构的改变有:旋转,转置等等。

16、稀疏矩阵

  • 创建:S=sparse(A),A为满矩阵,也可以直接用这个函数创建稀疏矩阵,格式为:S=sparse(i,j,s,m,n),其中i和j分别是系数矩阵的非零元素的行和列指标,s为响应的非零元素的值。m和n分别是矩阵的行和列的高度。
  • 例如:S=sparse([1,2,3,4],[3,2,1,3],[1,2,3,4],4,4)
  • 得到的稀疏矩阵如下:
    S =

       (3,1)        3
       (2,2)        2
       (1,3)        1
       (4,3)        4
     
  • A=full(S),把一个稀疏矩阵转化为一个满矩阵,可以用转换函数full();
  • nnz(X)返回非零值的个数,nonzeros(X)返回非零值,nzmax(S)返回用于存储非零值的空间长度。spy()函数是用图形显示矩阵非零值的分布。

二、运算部分

   运算符有算数运算符,关系运算符和逻辑运算符。

   .*表示对应的元素相乘,*表示的是矩阵的乘法,其他的类似。

    要注意的是.'表示矩阵转秩,当矩阵时复数时,不求矩阵的共轭。’表示矩阵转秩,当矩阵是复数时,求矩阵的共轭转秩。

    异或为xor,例如xor(A,B);&,|,~的重载函数为:and(),or(),和not()。

三、字符串处理函数

  • 创建字符数组

    strcat用来连接字符串,但是连接的字符串之间没有空格,如果要保留空格的话,可以用矩阵合并符来实现字符串合并,用法分别为c=strcat(a,b)或者是c=[a b]。

    用户也可以构造二位字符数组,str=['second';'string'];但是要保持每一行具有相同的长度,如果长度不一致的,要在尾部添加空格补齐。

    更简单的使用char('first','second'),不要求长度一致。具有类似功能的函数是strvcat('name','string')。

  • 创建字符串单元数组

   celldata=cellstr(data)逆函数为char(celldata)。

  • 字符串比较函数

    strcmp(S1,S2),比较两个字符串是否相等。

    strncmp(S1,S2,N)比较两个字符串的前N个字符是否相等。

    strcmpi(S2,S2)比较两个字符串是否相等,忽略大小写。

    d strncmpi(S1,S2,N)比较两个字符串的前N个字符是否相等,忽略大小写。

   也可以用关系运算符比较字符串。

  • 字符串查找和替换函数

   str=strrep(str1,str2,str3);把str1中的str2子串替换成str3;

   k=findstr(str1,str2);查找输入中较长的字符串中较短字符串的位置;

   k=strfind(str,pattern)查找str中pattern出现的位置;

   k=strfind(cellstr,pattern)查找单元字符串cellstr中pattern出现的位置;

   token=strtok('str')获得第一个分隔符之前的字符串;空格,制表符和换行符为分隔符;

   token=strtok('str',delimiter)获得第一个分隔符之前的字符串;输入delimiter为指定的分隔符;

   [token,rem]=strtok(...)获得第一个分隔符之前的字符串;返回值rem为第一个分隔符之后的字符串;

   x=strmatch('str',STRS)在字符串数组STRS中匹配字符串str,返回匹配上的字符串所在行的指标;

   x=strmatch('str',STRS,'excat')功能同上,但是要求完全匹配。

  • 数值转换

   num2str:把一个数值类型的数据转换为字符串。

  

  

 

 

 

 

今日有感

        好久好久没有写过什么文章了,或者说没有给自己写过什么,现在都已经马上就研二了,是面临就业了,希望每天自己能有好的生活习惯,希望自己每天都有进步,希望所记录的生活的点滴能够成为自己以后生活的回忆。

      我看了几期的职来职往,深有感触,觉得自己有很多方面是需要提高的,距离自己期望的月薪还有很大的差距,希望可以有目的的提高和改善。

      每位达人的点评都代笔了一批人的观点,你不可能让所有的人都肯定你,欣赏你,但是你必须要有自己的亮点,让真正欣赏你的人足够的欣赏你,这就够了。要做事,先做人,很重要。今天看职来职往有一句话挺受用的:处处喊大哥,福利自然多。哈哈,但是我偏偏不是那种嘴甜的人,是不是应该培养一下呢?还有就是请教别人是对别人最大的恭维。无论在任何时候,都要有一个谦虚的心态,但是在谦虚的背后真正需要的是真才实学。这点永远要记着。也就是对于任何的岗位来说准备好特别重要,有为才有位。同时我们也要做一个细心的人,这个世界不是有钱人的世界,不是有权人的世界,是有心人的世界。从别人身上多学习好的优点,慢慢的不断提高自己。就算是跪着,也要走完自己的职场生涯。

       看到一个女孩觉得很感动,是农村的,16岁就出来打工了,承担着家庭的重担,但是在工作中她慢慢的成长,希望通过自己的努力改善家庭的生活状况。最后她成功的进入了100强,为她感动,我也是农村来的,但是我比她幸运多了,我一直在父母的支持下上到了研究生,我有着更多的选择,但是我却不一定比她做的好,我也要努力学习承担起家庭的重担,让父母以后能有好的生活,加油!

        还有一点就是求职时候的穿着也很重要,作为女生,装不要太浓,裙子不能太短,高跟鞋也不能太高。不过不知道为什么,我喜欢穿裤子,不怎么喜欢穿裙子,为什么我看到的求职者穿的基本上都是裙子呢,好奇怪。呵呵,而且大部分的职场女达人也是裙子装扮,不知道我以后是不是也需要这样子。