精华内容
下载资源
问答
  • 文章PDF浏览下载链接 ... MATLAB常用基本数据类型:整型,浮点型,字符型,函数句柄,元胞数组和结构体数组。除了这些基本数据类型,MATLAB还有很多其它的数据类型不为人熟悉,这些数据类型在编程...
    MATLAB常用基本数据类型有:整型,浮点型,字符型,函数句柄,元胞数组和结构体数组。除了这些基本数据类型,MATLAB还有很多其它的数据类型不为人熟悉,这些数据类型在编程中也非常有用。MATLAB高级数据类型系列旨在向大家介绍它们:比如containers.Map tablesenumerationtime series等等,它们为什么有用,用来解决什么问题,并且怎样在科学工程计算中怎么使用。上篇我们提到了映射表结构(containers.Map)。本篇将介绍另一中新的MATLAB数据类型--table

    table简介

    为什么需要table数据结构

    MathWorks在MATLAB R2013b中引入了一种新的数据结构叫做table 。table类似统计 工具箱中的dataset ,其引入的目的就是用来取代dataset的数据类型。因为表状的数据在工程计算中越来越长久,有了table 类型,MATLAB用户就可以不用购买统计工具箱,也能使用表状的数据结构了。 table本质上来说是一种可以存放各种数据类型的容器,比如下面表Table.1中的数据,其中既有字符型,又有数值类型,其中第一行作为表头:Symbol,Name,Market,Cap,IPO, Year是各列的名字。
    Table.1 NASDAQ股票名称表
    Symbol Name Market Cap IPO Year
    AAPL Apple Inc $742.63B 1980
    AMZN Amazon.com, Inc $173.33B 1997
    MSFT Microsoft Corporation $346.9B 1986
    在conatiners.Map的章节中,我们介绍了MATLAB的基本数据类型(比如数组,原胞数组和结构体)在表达某些复杂数据类型时的局限性。这里不再一一赘述,读者只需要认识到:数组的局限性在于不能用来存放数值以外的数据,而使用元胞读取和索引内容时有种种不方便,比如无法区分该数据中的表头和其余的行数据。事实上,如果数据存放在如下的CSV文件中,并且用importdata 直接读取表Table.2中的CSV文件。
    "Symbol","Name","Market Cap","IPO Year"
    "AAPL","Apple Inc","$742.63B",1980
    "AMZN","Amazon.com Inc","$173.33B",1997
    "MSFT","Microsoft Corporation","$346.9B",1986
    

    读入之后数据将会被分成数值和非数值部分:

    <span style="color:#333333">% 用importdata直接读入CSV文件
    >> nasdaq = importdata('nasdaq.csv')
    nasdaq =                          % 结果存在struct中
            data: [3x1 double]
        textdata: {4x4 cell}
    >> nasdaq.data                    % csv中的数值部分
    ans =
            1980
            1997
            1986  
    >> nasdaq.textdata                % csv中的字符部分
    ans = 
        '"Symbol"'    '"Name"'                   '"Market Cap"'    '"IPO Year"'
        'AAPL'        'Apple Inc'                '$742.63B'        ''          
        'AMZN'        'Amazon.com Inc'           '$173.33B'        ''          
        'MSFT'        'Microsoft Corporation'    '$346.9B'         ''  
    </span>

    显然这不是我们所期待的要导入格式。

    通过导入数据构造table对象

    沿用表Table.2中nasdaq.csv文件,我们可以使用readtable 函数,构造一个新的table对象,把csv文件中的数据导入到该对象中。readtable函数接受文件名称作为输入,返回一个table对象。

    <span style="color:#333333">% 通过readtable函数来构造table对象
    >> nasdaq = readtable('nasdaq.csv')
    Warning: Variable names were modified to make them valid MATLAB identifiers. 
    nasdaq =                                                                
        Symbol             Name              MarketCap     IPOYear
        ______    _______________________    __________    _______
        'AAPL'    'Apple Inc'                '$742.63B'    1980   
        'AMZN'    'Amazon.com Inc'           '$173.33B'    1997   
        'MSFT'    'Microsoft Corporation'    '$346.9B'     1986   
    </span>

    注意第2行的warning,因为readtable 函数把nasdaq.csv中的第一行自动变成了这个table的表头,在创建table对象的时候,MATLAB会对做表头的文字做处理,这里把Market Cap和IPO Year两个词中的空格去掉,缩成一个词,这样做是为了方便将来使用dot语法来访问表中的数据。因为MATLAB修改了原来的表头,所以这里给出了warning。

    调用table构造函数来构造table对象

    我们还可以通过直接调用table类的构造函数来创建table对象 (什么是类的构造函数见参加<>第2.5节,构造函数和类的名称相同)。在containers.Map 的介绍中,我们举了电话号码簿的例子,如表Table.3所示,它是我们这节要构造的table对象的原始数据

    Table.3 电话号码簿
    姓名 电话号码
    Abby 5086470001
    Bob 5086470002
    Charlie 5086470003

    下面程序中第1,2行用元胞数组来表示表中每一列的数据,第3行规定了表头的名称,第4行调用table的构造函数创建table对象,先输入数据,再输入表头的名称。表头通过table对象的VariableNames属性来设置。

    <span style="color:#333333">name={'Abby';'Bob';'Charlie'};                        % 3x1列向量
    number={'5086470001';'5086470002';'5086470003'};      % 3x1列向量
    colName={'Name','Number'};
    phonetable=table(name,number,'VariableNames',colName)    
    </span>

    命令行显示如下

    <span style="color:#333333">% phonetable在命令行中disp的结果  
    phonetable = 
          Name          Number   
        _________    ____________
    
        'Abby'       '5086470001'
        'Bob'        '5086470002'
        'Charlie'    '5086470003'
    </span>

    第4行把Name和Number做为table对象的VariableNames,可以这样理解VariableNames,我们可以把table看成由一个个列数据组成的数据结构,每列都是矢量,其中存放相同类型的数据。如果一个table有两列,它就有两个列矢量,每个列矢量都是table的一个变量(Variable),给变量名字就是Variable Name。

    通过转换函数构造table对象

    除了使用table的构造函数来创建table对象,还可以使用转换函数把其它数据类型转成table,下列通过数组数据类型类构造table。下面的程序的1-2行,我们利用financial工具箱中的fetch函数,从Yahoo财经处得到雅虎从3月1日到3月10日的股票价格,fetch函数将返回一个数组,第3行我们利用array2table转换函数把得到数组转成table。

    <span style="color:#333333">% 通过array2table创建table对象  
    conn = yahoo;
    array = fetch(conn,'YHOO','3/1/2015','3/10/2015');
    yhoo = array2table(array,...
      'VariableNames', {'date','open','high','low','closing','volumn','adjusted'})
    </span>

    第4行中,我们通过VariableName来指定表头的内容,结果显示如下

    <span style="color:#333333">% yhoo的table在命令行的显示
    yhoo = 
         date       open     high      low     closing      volumn      adjusted
      __________    _____    _____    _____    _______    __________    ________
       7.3603e+05    42.57    42.92    42.18    42.68      1.0601e+07    42.68   
       7.3603e+05     43.6    43.93    42.67    42.98      1.1802e+07    42.98   
       7.3603e+05    43.98    44.24     43.4    43.44      1.1888e+07    43.44   
       7.3603e+05    44.18    44.31     43.5    44.16      1.1868e+07    44.16   
       7.3603e+05    42.08    44.38    41.97    43.99      3.0099e+07    43.99   
       7.3603e+05     43.7    43.95    42.42    42.62      2.2392e+07    42.62   
       7.3603e+05    44.06    44.43     43.7    44.11      1.1027e+07    44.11     
    </span>

    访问table中的数据

    通过表Table.1所建立的table对象,在命令行中显示如下:

    <span style="color:#333333">% nasdaq table在命令行中的显示
    nasdaq = 
        Symbol             Name              MarketCap     IPOYear
        ______    _______________________    __________    _______
    
        'AAPL'    'Apple Inc'                '$742.63B'    1980   
        'AMZN'    'Amazon.com Inc'           '$173.33B'    1997   
        'MSFT'    'Microsoft Corporation'    '$346.9B'     1986    
    </span>

    我们可以通过使用dot+Variablename的语法直接访问table中的列,返回的结果是cell格式的数据:

    <span style="color:#333333">% 使用dot语法访问table中的数据
    >> nasdaq.Symbol           % dot格式+变量名的访问方式
    ans = 
        'AAPL'
        'AMZN'
        'MSFT'
    >> class(nasdaq)           % 返回cell格式的数据
    ans =
    cell  
    </span>

    table类重载了subsref函数(什么是运算符的重载,参加《MATLAB面向对象编程-从入门到设计模式》12.1节),于是支持MATLAB传统的圆括号下标访问,如果要访问第一行,则:

    <span style="color:#333333">% 使用下标语法访问table中的数据
    >> nasdaq(1,:)
    ans = 
        Symbol       Name        MarketCap     IPOYear
        ______    ___________    __________    _______
    
        'AAPL'    'Apple Inc'    '$742.63B'    1980     
    </span>

    使用圆括号,返回的结果仍然是table,如果要访问第2到3行,则:

    <span style="color:#333333">% 使用下标语法访问table中的数据
    >> nasdaq(2:3,:)
    ans = 
        Symbol             Name              MarketCap     IPOYear
        ______    _______________________    __________    _______
    
        'AMZN'    'Amazon.com Inc'           '$173.33B'    1997   
        'MSFT'    'Microsoft Corporation'    '$346.9B'     1986     
    </span>

    返回的结果仍然是table。 table数据结构支持MATLAB传统的花括号下标访问,返回的结果是cell格式的数据

    <span style="color:#333333"> 
    % 花括号下标访问
    >> nasdaq{:,1}   % 花括号下标访问,返回第一列中的数据
    ans = 
        'AAPL'
        'AMZN'
        'MSFT' 
    </span>

    还可以把Dot语法和下标语法结合起来获取数据,下例代码访问table第一列的第三行,返回的结果是元胞。

    <span style="color:#333333">% Dot语法和圆括号下标访问结合
    >> nasdaq.Symbol(3)
    ans = 
        'MSFT'
    >> class(ans)     % 圆括号下标访问,返回结果是元胞 
    ans =
    cell  
    </span>

    Figure.1中以表Table.1中的数据为例,总结了几种访问table中不同区域的数据的方法。

    Figure.1 访问table中的数据

    展开全文
  • MATLAB映射表数据结构

    2020-08-25 14:17:46
    MATLAB常用基本数据类型:整型,浮点型,字符型,函数句柄,元胞数组和结构体数组。除了这些基本数据类型,MATLAB还有很多其它的数据类型不为人熟悉,这些数据类型在编程中也非常有用。MATLAB高级数据类型系列旨在...

     

    MATLAB常用基本数据类型有:整型,浮点型,字符型,函数句柄,元胞数组和结构体数组。除了这些基本数据类型,MATLAB还有很多其它的数据类型不为人熟悉,这些数据类型在编程中也非常有用。MATLAB高级数据类型系列旨在向大家介绍它们:比如 containers.Maptablesenumeration和time series等等,它们为什么有用,用来解决什么问题,并且怎样在科学工程计算使用。本篇首先介绍 containers.Map 数据类型。

    containers.Map简介

    MATLAB中最具代表性的高级数据类型是containers.Map,我们可以把它叫做映射表。它和函数映射有些类似,比如函数映射的定义是:

    F(x) = Y
    

    针对每一个X,都有一个唯一的Y与之对应,反之不一定。如图Fig.1所示。和函数映射相似,映射表用来形容键(Key)和键值(Key Value)之间的一一对应关系。每个Key都是独一无二的,且只能对一个Key Value。如图Fig.2所示。

    Fig.1 函数映射关系

    Fig.2 containers.Map类的映射示意图

    数组,元胞和结构体的局限性

    开始我们先介绍一下数组,元胞数组和结构体的局限性,为什么有的时候这些基本的数据类型无法满足程序的要求,换句话说,我们为什么需要 containers.Map 数据结构。假设要用MATLAB来记录电话号码簿中数据,比如表Table.1所示:

    Table.1 电话号码簿
    姓名 电话号码
    Abby 5086470001
    Bob 5086470002
    Charlie 5086470003

    先讨论数组,因为电话号码簿中既含有数字,又含有字符串,而数组中只能存放Double类型的数据,所以没有办法用数组直接记录电话号码薄中的内容。 再试试元胞数组,我们在第1行预先声明一个 3 X 3 的元胞数组,然后在2-4行按顺序填放号码簿的内容。

    % 元胞数组初始化
    addressBook    = cell(3,1);    % 预分配大小是MATLAB编程的好习惯 
    addressBook{1} = {'Abby',     '5086470001'};
    addressBook{2} = {'Bob' ,     '5086470002'};
    addressBook{3} = {'Charlie',  '5086470003'};      
    

    需要的时候,可以通过for循环访问其中的内容,比如:

    for iter = 1:length(addressBook)         % 元胞数组的遍历
       addressBook{iter}               % 通过Index访问元胞中的内容
    end
    

    但是按照顺序遍历电话号码簿没有什么实际用处,号码簿的主要功能应该是提供查找的功能才是。比如要想查询Charlie的电话号码,我们希望程序最好可以写成如下这样:

    CharlieNum = addressBook{'Charlie'}     % 提示:这是错误的写法
    

    或者

    CharlieNum = addressBook.Charlie        % 提示:这是错误的写法
    

    但是元胞数组的值只能通过Index去访问内容,不支持如上的访问方式。所以为了找到Charlie的电话号码,程序不得不遍历元胞中的所有内容,取出每一个元胞元素的第一列的字符串做比较,如果名字等于Charlie,则输出电话号码:

    % 使用for循环查找
    for iter = 1:length(addressBook)
       if strcmp(addressBook{iter}{1},'Charlie')
            addressBook{iter}{2}              % 如找到则输出电话号码
          break;
       end
    end
    

    当然还有其他的方式来盛放电话号码簿,比如把电话和名字分别存到到两个元胞数组中去

    names   = {'Abby','Bob','Charlie'};                 % 用元胞放号码
    numbers = {'5086470001','5086470002','5086470001'}; % 用元胞放名字
    ind = find(strcmp(names,'Charlie'));  % strcmp接受向量的输入 返回Logical数组 
                                          % find紧接着找出逻辑数组中非零元素的Index
    numbers{ind}  
    

    其中第3行strcmp接受元胞作为输入,在其中寻找Charlie,find函数将返回Charlie所在的位置,这样的方式比使用for循环要快,但无一例外的是,两种方法都要从头开始遍历一个数组,终究来说是慢的。 除查找性能慢外,使用元胞盛放电话号码簿类型的数据还有其它缺点:

    • 无法方便的验证重复数据。电话号码簿要求每一个人的名字都是独一无二的,所以在数据录入的时候要防止姓名的重复,但是我们没有其它办法知道某名字是否已经被使用过了,除非在每次输入的时候都对整个元胞里的内容做遍历比较。
    • 无法方便地添加内容。如果电话号码簿中的记录需要不断地增长,但是我们没有办法在一开始就估计出其大概的数量,于是无法有效的预先分配内存,所以添加数据时,一旦超过预先分配的量,MATLAB就要重新分配内存了。
    • 无法方便地删除内容。如果我们要从元胞中去掉某一记录,可以找到该记录,并把该位置的元胞内容置空,但这并不会自动减小元胞数组的长度,如果 这样的删减操作多了,元胞中会留下很多没有利用的空余位置。
    • 不方便作为函数的参数,具体原因见struct的局限性.

    最后我们再尝试一下用结构体盛放电话号码簿数据类型,struct的赋值很简单,比如可以直接赋值:

    % 赋值方法1
    addressBook.Abby   = '5086470001';
    addressBook.Bob  = '5086470002';
    addressBook.Charlie  = '5086470003';
    

    或者:

    % 赋值方法2
    addressBook = struct('Abby','5086470001','Bob','5086470002','Charlie','5086470003')
    

    方法1和方法2是等价的。 struct数据类型的查找很方便,比如要查询Charlie的电话号码,直接访问struct中的同名的field即可以了。

    num = addressBook.Charlie  
    

    如果要查询的人名是一个变量, 我们可以使用getfield函数:

    num = getfield(addressBook,name)  % 其中name是变量   
    

    struct盛放电话号码簿类型的数据,查询起来确实比元胞进步了不少,但还是有些不方便的地方。 因为struct的field的名字要求必须是以字母开头,这是一个很大的局限,并不是所有的类似电话号码簿的结构都可以用人名做索引,比如账户号码簿,股票代码等等,他们通常是用数字开头的,比如图Table.2中的数据:

    Table.2 深证股票代码
    股票代码 股票名称
    000001 深发展
    000002 万科
    000004 ST国农

    如果我们要求通过股票的代码来查找股票的具体信息,struct无法简单的直接做到。 使用struct的另一个不方便之处在于,当把struct当做函数参数,并且在函数内部需要对该struct做一定的修改时,为了要把修改后的结果返回,我们需要对原来的struct做完全的拷贝,显然如果struct中的数据很多的话,这样做是低效的。比如下面的函数中,addressBook被当做函数的参数传入,在函数中添加了一个新的field, 为了返回更新后的结构,函数内部必须重新构造一个新的struct,也就是s返回给该函数的调用者。

    % 把struct当做函数的参数    
    function s = modifystruct(s)
        s.Dave =  '5086470004';
    end
    

    用containers.Map来记录电话号码簿

    上面一节我们介绍了数组,元胞数组和结构体在模拟电话号码簿这种数据结构时的局限性,这节我们来看怎么用 containers.Map 来盛放电话号码簿中的内容:

    addressMap = containers.Map;             % 首先声明一个映射表对象变量
    addressMap('Abby')    = '5086470001';
    addressMap('Bob')     = '5086470002';
    addressMap('Charlie') = '5086470003';  
    

    第一行我们声明一个containers.Map的变量(其实是containers.Map类的对象)叫做addressMap,2,3,4行通过提供Key Key Value的方式来给对象赋值,其中单引号内部的值叫做键(Key),等式右边的叫做键值(Key Value)。通过这个结构,我们在MATLAB内存中,建立起了如图Fig.3的映射关系数据结构。

    Fig.3 电话号码簿映射表

    Fig.4 Map类的UML

    查找addressMap对象中的内容极其方便,比如查找我们想知道Charlie的电话号码,只需:

    % 查找  
    num  = addressMap('Charlie')  
    

    如果我们要修改Charlie的电话号码,只需 :

    % 赋值
    addressMap('Charlie') = newNum;  
    

    什么是containers.Map

    containers.Map是一个MATLAB的内置类(类是面向对象编程中的一个基本概念,在这里可以把类暂时理解成一种数据类型),所谓内置,就是MATLAB内部实现的,通常这种类的性能更加的优秀。containers.Map其中containers是Package的名称,Map是该Package中的一个类,Map是它的类名。用UML(Unified Modeling Language)的语法把该类表示出来,它的属性包括Count, KeyType,ValueType。它的常用方法包括keys,values,isKey,remove。如图Fig.4所示。

    containers.Map的属性和成员方法

    这节我们介绍containers.Map的属性和成员方法,假设我们这样初始化一个containers.Map对象:

    % 初始化一个Map对象
    addressMap = containers.Map;
    addressMap('Abby')    = '5086470001';
    addressMap('Bob')     = '5086470002';
    addressMap('Charlie') = '5086470003';
    

    在命令行中键入该对象的名称,MATLAB会显示该对象属性的基本信息:

    >> addressMap
    addressMap =
      Map with properties:
            Count: 3          % MAP 中映射对的数目
          KeyType: char       % MAP 中键的类型 
        ValueType: any        % MAP 中键值的类型   
    

    其中Count 表示Map对象中映射对的数目。按照规定,键的类型一定要是字符类型,不能是其它数据类型,而键值的类型可以是MATLAB中的任意类型:数组,元胞,结构体,MATLAB对象,甚至JAVA对象等等。因为键值的类型可以是任何MATLAB类型,所以 containers.Map 是MATLAB中极其灵活的数据类型。 成员方法keys 用来返回对象中所有的键:

    >> addressMap.keys
    ans =
        'Charlie'    'Abby'    'Bob'  
    

    成员方法values用来返回对象中的所有键值

    >> addressMap.values
    ans = 
        '5086470003'    '5086470001'    '5086470002'  
    

    remove用来移除对象中的一个键-键值对,经过下面的操作之后,该对象中的Count的值变成了2。

    >> addressMap.remove('Charlie')
    ans = 
      Map with properties:
            Count: 2          % 映射对数目减少
          KeyType: char
        ValueType: any
      
    

    isKey成员方法用来判断一个map对象中是否已经含有一个键值,比如:

    >> addressMap.isKey('Abby')
    ans =
         1
    >> addressMap.isKey('abby')    % 键是大小写敏感的
    ans =
         0  
    

    isKey的功能是查询,类似之前提到的find和strcmp函数合起来使用的例子。

    containers.Map的特点

    containers.Map可以不断地扩张不需预分配

    使用数组和元胞数组作为数据容器,通常要预先分配容器的大小。否则每次扩充容器,MATLAB都会重新分配内存,并且拷贝原来数组中的数据到新分配的内存中去。映射表是一个可以灵活扩充的容器,并且不需要预分配,每次往里面添加内容不会引起MATLAB重新分配内存。 我们可以通过提供两个元胞来构造映射表对象,比如下面我们构造一个机票簿数据结构:

    % 映射表的初始化方法1
    ticketMap = containers.Map( {'2R175', 'B7398', 'A479GY'}, ...
                                {'Abby', 'Bob, 'Charlie'});
      
    

    也可以在程序的一开始,先声明一个对象:

    % 映射表的初始化方法2  
    >> ticketMap = containers.Map 
    

    然后在计算的过程中慢慢的向表中插入数据:

    % 映射表的初始化方法2  
    >> ticketMap['2R175'] = 'Abby';
    ...
    >> ticketMap['A479GY'] = 'Charlie;  
    

    containers.Map可以作为参数在函数内部直接修改

    因为containers.Map是handle类(handle类的介绍参见《MATLAB面向对象编程-从入门到设计模式》第三章:MATLAB的句柄类和实值类),我们还可以方便的将这个对象传给任何MATLAB的函数,并且在函数内部直接修改对象内部的数据,并且不用把它当做返回值输出,比如:

    >> modifyMap(ticketMap);  
    

    modifyMap函数可以写成:

    function modifyMap(ticketMap)   % 该函数没有返回值
       .....
       ticketMap(NewKey) = newID 
    end  
    

    注意这里没有把修改的ticketMap当做返回值,在函数中我们直接修改了Map中的数据,这是MATLAB面向对象语言中handle类的特性。

    containers.Map可以增强程序的可读性

    映射表内部可以存储各种类型的数据,并且给它们起一些有意义的名字。具体的例子见元素周期表的例子。 访问和修改这些数据的时候,可以直接使用这些有意义的名字,从而增加程序的可读性。而如果用元胞数组存储这些数据,在访问和修改这些数据的时候, 需要使用整数的Index,程序可读性不够好。

    containers.Map提供对数据的快速查找

    映射表查找的复杂度是常数O(C)的,而传统的数组和元胞数组查找的复杂度是线性O(N)的。如果不熟悉算法中复杂度的概念,可以这样理解:如果使用数组或者元胞来存储数据,当我们要在该数据结构中搜索一个值时,只能做线性搜索,平均下来,搜索的时间和该数据结构中的元素的数目N成正比,即元胞和数组中的元素越多,找到一个值所用的时间就越长,这叫做线性的复杂度 O(N)。而映射表采取的底层实现是哈希表(Hash Map),搜索时间是常数C,理论上来说搜索速度和集合中元素的个数没有关系。所以当容器中元素数量众多的时候,要想查找得快,可以使用containers.Map结构。具体例子见快速查找的例子。 下面通过对假想的数据集合进行查找,来比较一下数组和container.Map的性能。我们第一行先构造一个含有1000000(10^7)个整数的数组(这是数组中元素的个数很多,如果只有少量元素,线性查找的效率会高一些),按顺序填充从1到(10^7)的整数;作为比较,第二行再构造一个containers.Map对象,往内部填充从1到(10^7)的整数,Key和KeyValue都相同。

    a = 1:1000000;
    m = containers.Map(1:1000000,ones(1,1000000));  
    

    数组数据结构,使用find函数依次查找从1到(10^7)的整数,在笔者的机器上,耗时28.331901秒

    % array的查找
    tic
    for i=1:100000, 
        find(b==i);
    end; 
    toc  
    
    % command line结果
    
    
    
    
    Elapsed time is 28.331901 seconds.  
    

    containers.Map数据结构,使用键值1到(10^7)进行访问, 在笔者的机器上,耗时只需1.323007秒, 结论是:如果有大量的数据,并且要频繁的进行查找操作,可以考虑使用containers.Map数据结构。(读者可以试试减少容器中元素的个数,观察一下什么情况下,数组的查找会更快一些。)

    % 映射表的查找
    tic
    for i=1:100000, 
        m(i);
    end; 
    toc
    
    % command line结果      
    
    
    
    
    Elapsed time is 1.323007 seconds.
    

    谈到在MATLAB中使用高级数据结构,另一种常见的做法是直接使用Java和Python对象,这里顺便比较一下在MATLAB中使用Java的哈希表的效率。再笔者的机器上,耗时3.072889秒.

    % JAVA哈希表的查找
    s = java.util.HashSet();
    for i=1:100000, s.add(i); end   
    tic; 
    for i=1:100000, 
        s.contains(i); 
    end; 
    toc
    
    % command line结果      
    
    
    
    
    
    
    Elapsed time is 3.072889 seconds.
    

    containers.Map的使用实例

    用来盛放元素周期表

    工程计算中可以使用这种键-键值的例子有很多。比如物理化学计算中可以用映射表来盛放元素周期表中的内容:

    >> ptable = containers.Map;
    >> ptable('H')  = 1 ;
    >> ptable('He') = 2 ;  
    

    其中键是原子符号,而键值是原子量。因为键值的类型不限,所以键值本身还可以是对象,比如Atom类对象,其中包涵更多有用的内容:

    % 类文件Atom.m
    classdef Atom < handle
      properties
          atomicNumber
          fullName
      end
      methods
        function obj = Atom(num,name)
           obj.atomicNumber = num ;
           obj.fullName = name
        end
      end
    end  
    

    \end{Verbatim} 于是:

    % 键值可以是Atom对象 		  
    >> ptable('H') = Atom(1,'hydrogen');
    >> ptable('H') = Atom(2,'helium');  
    

    用来实现快速地检索

    这个问题来自ilovematlab一个网友的提问:

    大家好,最近遇到一个问题,要构建20000次以上的三元素向量,且保证每次不重复构建,该向量元素值在2000―3000之间不定数,目前采用的方法是建立一历史档案矩阵A,构建一个存储一行,A大小行数持续增加。每次在构建出一新的向量时对该向量与历史档案矩阵每行进行对比,最终确定是否构建过,若没构建过,重新构建。算法显示该检查程序运算时间在执行20000次以上时,会超过200S的运行时间。想力争减小该时间,求方法。 多谢!

    这位网友的问题不在于如何构建这些向量,而是如何保证每次不重复的构建。他一开始想出的解决方法是用矩阵A来存储历史档案,每建立一个新的向量,和该历史档案已有的内容做比较,如果在档案中没有存档,则构建。这样设计的问题是,如他所述,当A中存储的向量变多之后,每次检查该向量是否之前被创建过的时间加长。 这是一个典型的可以用映射表来解决的问题,把线性的复杂度转成常数的复杂度。他可以给每个向量设计一个独立无二的ID,比如直接转数字成id : num2str(vector)

    % 构建
    mydictionary = containers.Map
    
    % 插入数据
    id = num2str(vector) ; % 比如vector = [1 2 3];
    mydictionary('some_id') = vector ;  
    

    之后的检索也是通过vector得到独一无二的ID,然后通过isKey来判断该键值是否已经被加入到MAP中去了。

    some_otherID = some_other_vector ;
    % 验证是否已经构建给过
    if mydictinary.isKey('some_otherID')
          % 做要做的工作
    end  
    
    展开全文
  • 又到了学习周一!接下来进入我们大家平时最头痛也是花费时间...文末简单气象相关编程实例(如方差、滑动检验、流函数势函数等)可供学习~1.MATLAB数据类型 MATLAB提供15种基本数据类型,常用数据结构是整型...

    440df333802e115d8e88d366a94f7049.gif

        又到了学习的周一!接下来进入我们大家平时最头痛也是花费时间最多的部分——数据处理。MATLAB在数据处理方面有着显著的优势,可视化的数据窗更让数据分析的过程变得十分便捷。一起来学习一下MATLAB的数据部分的基础知识吧!文末有简单的气象相关的编程实例(如方差、滑动检验、流函数势函数等)可供学习~

    1.MATLAB数据类型

        MATLAB提供15种基本数据类型,常用数据结构是整型数据、单精度浮点型、双精度浮点型、逻辑型、字符串型、单元数组和结构体类型。

    下表显示了MATLAB中的数据类型:

    数据类型

    含义

    int8

    8位有符号整数

    uint8

     8位无符号整数

    int16

    16位有符号整数

    uint16

    16位无符号整数

    int32

    32位有符号整数

    uint32

    32位无符号整数

    int64

    64位有符号整数

    uint64

    64位无符号整数

    single

    单精度数值数据

    double

    双精度数值数据

    logical

    1或0,分别代表true和false

    char

    字符串

    结构体

    具有能够存储不同维数和数据类型的数组的命名字段

    单元格阵列

    能够存储不同维数和数据类型的数组

    函数处理

    指向一个函数的指针

    用户类

    用户定义的类构造的对象

    Java类

    从Java类构造的对象

    2.数据类型转换

        在实际应用过程中,常常会出现字符和数字等数据结构之间互相转换的情形,MATLAB提供了各种用于将一种数据类型转换为另一种数据类型的函数。 

        MATLAB自带的转换函数有:

    函数

    描述说明

    char

    转换为字符串

    int2str

    将整数数据转换为字符串

    mat2str

    将矩阵转换为字符串

    num2str

    将数字转换为字符串

    str2double  

    将字符串转换为双精度值

    str2num

    将字符串转换为数字

    native2unicode   

    将数字字节转换为Unicode字符

    unicode2native 

    将Unicode字符转换为数字字节

    base2dec

    将基数N字符串转换为十进制数

    bin2dec

    将二进制数字串转换为十进制数

    dec2base

     将十进制转换为字符串中的N数字

    dec2bin

    将十进制转换为字符串中的二进制数

    dec2hex

    将十进制转换为十六进制数字

    hex2dec

    将十六进制数字字符串转换为十进制数

    hex2num

    十六进制数字字符串转换为双精度数字

    num2hex 

    将单数转换为IEEE十六进制字符串

    cell2mat

    将单元格数组转换为数组

    cell2struct 

    将单元格数组转换为结构数组

    cellstr

    从字符数组创建字符串数组

    mat2cell

    将数组转换为具有潜在不同大小的单元格的单元阵列

    num2cell

    将数组转换为具有一致大小的单元格的单元阵列

    struct2cell

    将结构转换为单元格数组

    使用方式形如:

    a = 3.145;b = num2str(a);

    判断变量的数据类型可用函数calss:

    class(b)

    得到变量b的数据类型是字符串:

    5a00402f4e45029aa2f593a74c988d07.png

    3.运算符

        与大多数编程语言一样,MATLAB中运算符分为算术运算符、逻辑运算符、关系运算符、位运算、集合运算。

    在气象编程中,掌握算术运算、逻辑运算和关系运算就足够各位小伙伴应付99%的编程需求啦~

    3.1 算术运算符

        +、-、*、/这四个符号分别表示平时计算器上使用的加、减、乘、除,在这里就不再说明。

    以下是一些MATLAB里设定的你可能用到的算术运算符:

    符号

    功能

    . /

    矩阵右除

    .\

    矩阵左除

    ^

    幂运算

    '

    转置

    3.2 关系运算符

        关系运算符主要指的是>、

    符号

    功能

    ~=

    不等于

    3.3 集合操作符

    顾名思义,就是针对两个数据集合之间进行的操作:

    函数

    功能

    intersect(A,B)

    返回两个数据的交集

    ismember(A,B)

    返回与A大小相同的数组

    issorted(A)

    判断A是否按顺序排序

    setdiff(A,B)

    返回不在B中的值

    setxor(A,B)

    两个数组的异或

    union(A,B)

    两个数组的并集

    unique(A)

    除去数组中的重复值,返回一个各元素均唯一的数组

        其实学会以上知识其实就足够编出一些简单的如方差、相关等计算脚本啦~练手材料在下方~微信不能链接外部链接,请复制粘贴到地址栏食用~

    9c68b4303527a45e8cd564941a120d50.gif

    百看不厌-MATLAB入门经典教程:

    bbs.06climate.com/forum.php?mod=viewthread&tid=1909

    MATLAB程序百例:

    bbs.06climate.com/forum.php?mod=viewthread&tid=18766

    计算方法(数值分析)常用算法程序汇总:by:Aires

    bbs.06climate.com/forum.php?mod=viewthread&tid=11956

    [原创]MATLAB在大气环境科学中的应用:by:zhenliangli

    bbs.06climate.com/forum.php?mod=viewthread&tid=50573

    用MATLAB实现批量线性回归,附参考源代码!:by:athlon8048

    bbs.06climate.com/forum.php?mod=viewthread&tid=3178

    最小二乘法:by:lvzhaof

    bbs.06climate.com/forum.php?mod=viewthread&tid=11554

    MATLAB进行分段拟合:by:shirly

    bbs.06climate.com/forum.php?mod=viewthread&tid=29230

    MATLAB循环操作矩阵化举例:by:ghf2679451792

    bbs.06climate.com/forum.php?mod=viewthread&tid=97899

    MATLAB 矩阵运算,for循环太慢?考虑一下逻辑值:by:赵晓康

    bbs.06climate.com/forum.php?mod=viewthread&tid=96115

    超前滞后相关+滑动平均:by:Aires

    bbs.06climate.com/forum.php?mod=viewthread&tid=14512

    基于MATLAB的各种多元统计分析模型源代码:by:kingjames

    bbs.06climate.com/forum.php?mod=viewthread&tid=67774

    分享做回归分析的程序——单序列对含NaN的空间场做回归:by:Aires

    bbs.06climate.com/forum.php?mod=viewthread&tid=22346

    滑动T检验程序:by:daniel_0817

    bbs.06climate.com/forum.php?mod=viewthread&tid=41568

    滑动相关:by:吴东佑

    bbs.06climate.com/forum.php?mod=viewthread&tid=68286

    滑动平均MATLAB程序:by:honview

    bbs.06climate.com/forum.php?mod=viewthread&tid=21650

    日数据处理为月数据和年数据(sum & mean): by:kingjames

    bbs.06climate.com/forum.php?mod=viewthread&tid=89092

    平均、方差与相关,积分权重导致的计算陷阱:I.空间平均:by:斥鷃

    bbs.06climate.com/forum.php?mod=viewthread&tid=42046

    MATLAB单因素方差分析: by:kongfeng0824

    bbs.06climate.com/forum.php?mod=viewthread&tid=16045

    【原创】运用MATLAB做非线性拟合的两种方法:by:卿暮霏

    bbs.06climate.com/forum.php?mod=viewthread&tid=18281

    MATLAB相关系数计算:by:Aires

    bbs.06climate.com/forum.php?mod=viewthread&tid=11123

    滑动T+改进MMK+一阶相关系数:by:kingjames

    bbs.06climate.com/forum.php?mod=viewthread&tid=61399

    MATLAB分析多个变量的贡献率:by:汪清旭

    bbs.06climate.com/forum.php?mod=viewthread&tid=96266

    MATLAB丨绘制引导气流回归场(风场矢量)并进行显著性检验(含代码和数据):by:Chwithin

    bbs.06climate.com/forum.php?mod=viewthread&tid=96795

    合成分析的显著性检验:by:luyunlong

    bbs.06climate.com/forum.php?mod=viewthread&tid=96585

    关于MATLAB空间相关性及显著性检验:by:dnh

    bbs.06climate.com/forum.php?mod=viewthread&tid=56724

    [求助]如何在MATLAB里面对通过显著性检验的区域打点显示?

    bbs.06climate.com/forum.php?mod=viewthread&tid=91653

    已知uv的大小,求风向标的风向:by:南信大wzx

    bbs.06climate.com/forum.php?mod=viewthread&tid=96159

    分享一个计算风向的程序:by:天坑一地坑

    bbs.06climate.com/forum.php?mod=viewthread&tid=49288

    MATLAB丨绘制速度势和辐散风图(含代码、注释、数据、文献等):by:Chwithin

    bbs.06climate.com/forum.php?mod=viewthread&tid=94948

    MATLAB读取NCEP细网格资料及计算散度、涡度平流、温度平流、K指数等要素:by:F117_ren_0

    bbs.06climate.com/forum.php?mod=viewthread&tid=27279

    [讨论] 风应力旋度计算:

    bbs.06climate.com/forum.php?mod=viewthread&tid=37719

    基于彭曼公式ET0计算MATLAB代码:by:Jude

    bbs.06climate.com/forum.php?mod=viewthread&tid=69234

    问老外要来的EP通量程序:by:愉悦

    bbs.06climate.com/forum.php?mod=viewthread&tid=17788

    WRF模式结果处理及部分气象参数计算:by:Lighting

    bbs.06climate.com/forum.php?mod=viewthread&tid=50188

    降雨径流--集中度、集中期--MATLAB代码:by:kingjames

    bbs.06climate.com/forum.php?mod=viewthread&tid=67900

    水文气象要素——年内分配相关指数:by:kingjames

    bbs.06climate.com/forum.php?mod=viewthread&tid=61308

    计算风暴相对螺旋度---程序:by:Mabsh12

    bbs.06climate.com/forum.php?mod=viewthread&tid=61287

    MATLAB计算旋度-程序分享:by:Aiiky

    bbs.06climate.com/forum.php?mod=viewthread&tid=85443

    MATLAB流函数与势函数的数值计算程序:by:沙颖凯

    bbs.06climate.com/forum.php?mod=viewthread&tid=20777

    [原创]MATLAB矢量地理数据相关计算(涡度、散度、平流...):by:沙颖凯

    bbs.06climate.com/forum.php?mod=viewthread&tid=20665

    发一个MATLAB计算PDSI的函数:by:kingjia

    bbs.06climate.com/forum.php?mod=viewthread&tid=43664

    计算SPI的MATLAB GUI:by:matbasin

    bbs.06climate.com/forum.php?mod=viewthread&tid=97471

    【MATLAB】工具箱climate data toolbox好用到爆炸 :

    bbs.06climate.com/forum.php?mod=viewthread&tid=94786

    分享一个自己编的小程序(求total cloud cover):by:qinkong

    bbs.06climate.com/forum.php?mod=viewthread&tid=33159

    用MATLAB分析西太平洋副高脊线位置与中国东部整层向北水汽通量的相关性:byrabialee

    bbs.06climate.com/forum.php?mod=viewthread&tid=96473

    [求助]西太副高环流指标:

    bbs.06climate.com/forum.php?mod=viewthread&tid=97605

     [求助]有没有用MATLAB编写的计算CAPE( 对流有效位能)的程序?:

    bbs.06climate.com/forum.php?mod=viewthread&tid=7662

    9524324360397a49d1779797b184ad71.gif

    本期内容到此结束!意犹未尽?

    欢迎到家园MATLAB板块,一起讨论吧!

    http://bbs.06climate.com/

    编辑:星星伴月

    5a9ec7b5f34cd52f8761057444aeac84.gif

    展开全文
  • 又到了学习周一!接下来进入我们大家平时最头痛也是花费时间...文末简单气象相关编程实例(如方差、滑动检验、流函数势函数等)可供学习~1.MATLAB数据类型 MATLAB提供15种基本数据类型,常用数据结构是整型...

    f0bd4f945f50fc5a5d3ef94287c08c6e.gif

        又到了学习的周一!接下来进入我们大家平时最头痛也是花费时间最多的部分——数据处理。MATLAB在数据处理方面有着显著的优势,可视化的数据窗更让数据分析的过程变得十分便捷。一起来学习一下MATLAB的数据部分的基础知识吧!文末有简单的气象相关的编程实例(如方差、滑动检验、流函数势函数等)可供学习~

    1.MATLAB数据类型

        MATLAB提供15种基本数据类型,常用数据结构是整型数据、单精度浮点型、双精度浮点型、逻辑型、字符串型、单元数组和结构体类型。

    下表显示了MATLAB中的数据类型:

    数据类型

    含义

    int8

    8位有符号整数

    uint8

     8位无符号整数

    int16

    16位有符号整数

    uint16

    16位无符号整数

    int32

    32位有符号整数

    uint32

    32位无符号整数

    int64

    64位有符号整数

    uint64

    64位无符号整数

    single

    单精度数值数据

    double

    双精度数值数据

    logical

    1或0,分别代表true和false

    char

    字符串

    结构体

    具有能够存储不同维数和数据类型的数组的命名字段

    单元格阵列

    能够存储不同维数和数据类型的数组

    函数处理

    指向一个函数的指针

    用户类

    用户定义的类构造的对象

    Java类

    从Java类构造的对象

    2.数据类型转换

        在实际应用过程中,常常会出现字符和数字等数据结构之间互相转换的情形,MATLAB提供了各种用于将一种数据类型转换为另一种数据类型的函数。 

        MATLAB自带的转换函数有:

    函数

    描述说明

    char

    转换为字符串

    int2str

    将整数数据转换为字符串

    mat2str

    将矩阵转换为字符串

    num2str

    将数字转换为字符串

    str2double  

    将字符串转换为双精度值

    str2num

    将字符串转换为数字

    native2unicode   

    将数字字节转换为Unicode字符

    unicode2native 

    将Unicode字符转换为数字字节

    base2dec

    将基数N字符串转换为十进制数

    bin2dec

    将二进制数字串转换为十进制数

    dec2base

     将十进制转换为字符串中的N数字

    dec2bin

    将十进制转换为字符串中的二进制数

    dec2hex

    将十进制转换为十六进制数字

    hex2dec

    将十六进制数字字符串转换为十进制数

    hex2num

    十六进制数字字符串转换为双精度数字

    num2hex 

    将单数转换为IEEE十六进制字符串

    cell2mat

    将单元格数组转换为数组

    cell2struct 

    将单元格数组转换为结构数组

    cellstr

    从字符数组创建字符串数组

    mat2cell

    将数组转换为具有潜在不同大小的单元格的单元阵列

    num2cell

    将数组转换为具有一致大小的单元格的单元阵列

    struct2cell

    将结构转换为单元格数组

    使用方式形如:

    a = 3.145;b = num2str(a);

    判断变量的数据类型可用函数calss:

    class(b)

    得到变量b的数据类型是字符串:

    100995fe1004865250ff31a753ea9128.png

    3.运算符

        与大多数编程语言一样,MATLAB中运算符分为算术运算符、逻辑运算符、关系运算符、位运算、集合运算。

    在气象编程中,掌握算术运算、逻辑运算和关系运算就足够各位小伙伴应付99%的编程需求啦~

    3.1 算术运算符

        +、-、*、/这四个符号分别表示平时计算器上使用的加、减、乘、除,在这里就不再说明。

    以下是一些MATLAB里设定的你可能用到的算术运算符:

    符号

    功能

    . /

    矩阵右除

    .\

    矩阵左除

    ^

    幂运算

    '

    转置

    3.2 关系运算符

        关系运算符主要指的是>、

    符号

    功能

    ~=

    不等于

    3.3 集合操作符

    顾名思义,就是针对两个数据集合之间进行的操作:

    函数

    功能

    intersect(A,B)

    返回两个数据的交集

    ismember(A,B)

    返回与A大小相同的数组

    issorted(A)

    判断A是否按顺序排序

    setdiff(A,B)

    返回不在B中的值

    setxor(A,B)

    两个数组的异或

    union(A,B)

    两个数组的并集

    unique(A)

    除去数组中的重复值,返回一个各元素均唯一的数组

        其实学会以上知识其实就足够编出一些简单的如方差、相关等计算脚本啦~练手材料在下方~微信不能链接外部链接,请复制粘贴到地址栏食用~

    19687703846a9eddc60d83912f1c4bf3.gif

    百看不厌-MATLAB入门经典教程:

    bbs.06climate.com/forum.php?mod=viewthread&tid=1909

    MATLAB程序百例:

    bbs.06climate.com/forum.php?mod=viewthread&tid=18766

    计算方法(数值分析)常用算法程序汇总:by:Aires

    bbs.06climate.com/forum.php?mod=viewthread&tid=11956

    [原创]MATLAB在大气环境科学中的应用:by:zhenliangli

    bbs.06climate.com/forum.php?mod=viewthread&tid=50573

    用MATLAB实现批量线性回归,附参考源代码!:by:athlon8048

    bbs.06climate.com/forum.php?mod=viewthread&tid=3178

    最小二乘法:by:lvzhaof

    bbs.06climate.com/forum.php?mod=viewthread&tid=11554

    MATLAB进行分段拟合:by:shirly

    bbs.06climate.com/forum.php?mod=viewthread&tid=29230

    MATLAB循环操作矩阵化举例:by:ghf2679451792

    bbs.06climate.com/forum.php?mod=viewthread&tid=97899

    MATLAB 矩阵运算,for循环太慢?考虑一下逻辑值:by:赵晓康

    bbs.06climate.com/forum.php?mod=viewthread&tid=96115

    超前滞后相关+滑动平均:by:Aires

    bbs.06climate.com/forum.php?mod=viewthread&tid=14512

    基于MATLAB的各种多元统计分析模型源代码:by:kingjames

    bbs.06climate.com/forum.php?mod=viewthread&tid=67774

    分享做回归分析的程序——单序列对含NaN的空间场做回归:by:Aires

    bbs.06climate.com/forum.php?mod=viewthread&tid=22346

    滑动T检验程序:by:daniel_0817

    bbs.06climate.com/forum.php?mod=viewthread&tid=41568

    滑动相关:by:吴东佑

    bbs.06climate.com/forum.php?mod=viewthread&tid=68286

    滑动平均MATLAB程序:by:honview

    bbs.06climate.com/forum.php?mod=viewthread&tid=21650

    日数据处理为月数据和年数据(sum & mean): by:kingjames

    bbs.06climate.com/forum.php?mod=viewthread&tid=89092

    平均、方差与相关,积分权重导致的计算陷阱:I.空间平均:by:斥鷃

    bbs.06climate.com/forum.php?mod=viewthread&tid=42046

    MATLAB单因素方差分析: by:kongfeng0824

    bbs.06climate.com/forum.php?mod=viewthread&tid=16045

    【原创】运用MATLAB做非线性拟合的两种方法:by:卿暮霏

    bbs.06climate.com/forum.php?mod=viewthread&tid=18281

    MATLAB相关系数计算:by:Aires

    bbs.06climate.com/forum.php?mod=viewthread&tid=11123

    滑动T+改进MMK+一阶相关系数:by:kingjames

    bbs.06climate.com/forum.php?mod=viewthread&tid=61399

    MATLAB分析多个变量的贡献率:by:汪清旭

    bbs.06climate.com/forum.php?mod=viewthread&tid=96266

    MATLAB丨绘制引导气流回归场(风场矢量)并进行显著性检验(含代码和数据):by:Chwithin

    bbs.06climate.com/forum.php?mod=viewthread&tid=96795

    合成分析的显著性检验:by:luyunlong

    bbs.06climate.com/forum.php?mod=viewthread&tid=96585

    关于MATLAB空间相关性及显著性检验:by:dnh

    bbs.06climate.com/forum.php?mod=viewthread&tid=56724

    [求助]如何在MATLAB里面对通过显著性检验的区域打点显示?

    bbs.06climate.com/forum.php?mod=viewthread&tid=91653

    已知uv的大小,求风向标的风向:by:南信大wzx

    bbs.06climate.com/forum.php?mod=viewthread&tid=96159

    分享一个计算风向的程序:by:天坑一地坑

    bbs.06climate.com/forum.php?mod=viewthread&tid=49288

    MATLAB丨绘制速度势和辐散风图(含代码、注释、数据、文献等):by:Chwithin

    bbs.06climate.com/forum.php?mod=viewthread&tid=94948

    MATLAB读取NCEP细网格资料及计算散度、涡度平流、温度平流、K指数等要素:by:F117_ren_0

    bbs.06climate.com/forum.php?mod=viewthread&tid=27279

    [讨论] 风应力旋度计算:

    bbs.06climate.com/forum.php?mod=viewthread&tid=37719

    基于彭曼公式ET0计算MATLAB代码:by:Jude

    bbs.06climate.com/forum.php?mod=viewthread&tid=69234

    问老外要来的EP通量程序:by:愉悦

    bbs.06climate.com/forum.php?mod=viewthread&tid=17788

    WRF模式结果处理及部分气象参数计算:by:Lighting

    bbs.06climate.com/forum.php?mod=viewthread&tid=50188

    降雨径流--集中度、集中期--MATLAB代码:by:kingjames

    bbs.06climate.com/forum.php?mod=viewthread&tid=67900

    水文气象要素——年内分配相关指数:by:kingjames

    bbs.06climate.com/forum.php?mod=viewthread&tid=61308

    计算风暴相对螺旋度---程序:by:Mabsh12

    bbs.06climate.com/forum.php?mod=viewthread&tid=61287

    MATLAB计算旋度-程序分享:by:Aiiky

    bbs.06climate.com/forum.php?mod=viewthread&tid=85443

    MATLAB流函数与势函数的数值计算程序:by:沙颖凯

    bbs.06climate.com/forum.php?mod=viewthread&tid=20777

    [原创]MATLAB矢量地理数据相关计算(涡度、散度、平流...):by:沙颖凯

    bbs.06climate.com/forum.php?mod=viewthread&tid=20665

    发一个MATLAB计算PDSI的函数:by:kingjia

    bbs.06climate.com/forum.php?mod=viewthread&tid=43664

    计算SPI的MATLAB GUI:by:matbasin

    bbs.06climate.com/forum.php?mod=viewthread&tid=97471

    【MATLAB】工具箱climate data toolbox好用到爆炸 :

    bbs.06climate.com/forum.php?mod=viewthread&tid=94786

    分享一个自己编的小程序(求total cloud cover):by:qinkong

    bbs.06climate.com/forum.php?mod=viewthread&tid=33159

    用MATLAB分析西太平洋副高脊线位置与中国东部整层向北水汽通量的相关性:byrabialee

    bbs.06climate.com/forum.php?mod=viewthread&tid=96473

    [求助]西太副高环流指标:

    bbs.06climate.com/forum.php?mod=viewthread&tid=97605

     [求助]有没有用MATLAB编写的计算CAPE( 对流有效位能)的程序?:

    bbs.06climate.com/forum.php?mod=viewthread&tid=7662

    1b14d82c6165dd2b3b4a38aabe59a436.gif

    本期内容到此结束!意犹未尽?

    欢迎到家园MATLAB板块,一起讨论吧!

    http://bbs.06climate.com/

    编辑:星星伴月

    bb3cfbba90e997e450a5786a25a52441.gif

    展开全文
  • MATLAB数据类型及转换

    千次阅读 2019-09-09 14:00:07
    MATLAB数据类型及转换 MATLAB主要数据类型:整型,浮点型,逻辑,字符,日期和时间,结构数组,单元格数组及函数句柄等,其中函数句柄是MATLAB所特有一种数据类型。 一:整数型与浮点型 MATLAB提供了几种...
  • MATLAB常用基本数据类型:整型,浮点型,字符型,函数句柄,元胞数组和结构体数组。除了这些基本数据类型,MATLAB还有很多其它的数据类型不为人熟悉,这些数据类型在编程中也非常有用。MATLAB高级数据类型系列旨在...
  • MATLAB常用的形态学操作函数

    千次阅读 2013-04-13 16:59:03
    原文地址:MATLAB常用形态学操作函数作者:ggbondgt 常用形态学操作函数 ...其中:BW2=dilate(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行膨胀操作。输入图像BW1类型为double或uni
  • MATLAB常用形态学操作函数

    千次阅读 2017-03-21 17:05:55
    MATLAB常用形态学操作函数  (2009-07-15 14:54:25) 转载▼ ...常用形态学操作函数 ...该函数能够实现二值图像膨胀操作,以下形式: ...其中:BW2=dilate(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵
  • 常用形态学操作函数(转自:http://blog.sina.com.cn/s/blog_4c52e9e20100e5if.html)1、dilate函数该函数能够实现二值图像膨胀操作,以下形式:BW2=dilate(BW1,SE)BW2=dilate(BW1,SE,…,n)其中:BW2=dilate...
  • 常用形态学操作函数(转自:http://blog.sina.com.cn/s/blog_4c52e9e20100e5if.html)1、dilate函数该函数能够实现二值图像膨胀操作,以下形式:BW2=dilate(BW1,SE)BW2=dilate(BW1,SE,…,n)其中:BW2=dilate...
  • 常用形态学操作函数(转自:http://blog.sina.com.cn/s/blog_4c52e9e20100e5if.html) 1、dilate函数 ...其中:BW2=dilate(BW1,SE)表示使用二值结构要素矩阵SE队图像数据矩阵BW1执行膨胀操作...
  • 1-4、数据结构——图

    2017-09-04 11:21:46
    图结构是数学建模中最常用的数据结构之一,且图论相关模型在数学建模中也广泛的应用。本文从数据结构这门课的专业知识出发,第一部分列举了一些与图相关的一些基本概念,包括边、顶点、度等。第二部分列举了一些图...
  • 1-5、数据结构——map

    2017-09-04 15:17:17
    除此之外还有一些Matlab封装好的数据结构容器,具体类别可以和c++stl模板库对比。本文介绍是其中十分具代表性一种容器:containers.Map,即map容器,用中文我们可以把它叫做映射表。map容器与python中...
  • 这一组一个有用相关链接列表以及类似链接 数据。 加拿大行星模拟地形三维映射的数据集 激光扫描非结构化地形从罗孚平台。 包括Matlab代码数据解析。 徕卡呈规则(投影数据) 激光扫描数据的示例数据库。 ...
  • * 数学软件 Matlab 文件操作 优选文档 Matlab数据类型 Matlab 数据类型的最大特点是每一种类型都是以数组为基础Matlab事实上把每种类型的数据都作为数组来处理 Matlab 常用的数据类型 numeric数值型 char字符型 ...
  • BP神经网络是一种神经网络学习算法,通常预先假定网络的结构已经确定,即已知计算单元层数,每层单元数目及单元之间连接,当输入输出之间是非线性关系及训练数据充足情况下,它可以出色完成不同领域问题。...
  • 语音识别的MATLAB实现

    热门讨论 2009-03-03 21:39:18
    语音识别的MATLAB实现 声控小车结题报告 小组成员:关世勇 吴庆林 一、 项目要求: 声控小车是科大华为科技制作竞赛命题组的项目,其要求是编写一个语言识别程序并适当改装一个小型机动车,使之在一个预先不知道...
  • matlab扩展编程 和代码

    2018-07-21 14:18:54
    第1部分(第1章—第6章):MATLAB 6安装和运行、MatrixVB、Excellink、MATLAB Web Server、MATLAB的数据结构和编程技巧、MATLAB图形用户界面编程:第2部分(第7章—第11章):MATLAB引擎、MATLAB可执行程序、MATLAB ...
  • matlab中图和队列

    2020-03-04 23:02:48
    图是一种表示节点之间拓扑关系的数据结构常用的表示方法邻接矩阵和邻接表,邻接矩阵是空间换时间的做法,鉴于计算机内存的飞速发展,以及我也比较懒,所以就直接在matlab中声明一个 graph = zeros(totalNu...
  • BP神经网络是一种神经网络学习算法,通常预先假定网络的结构已经确定,即已知计算单元层数,每层单元数目及单元之间连接,当输入输出之间是非线性关系及训练数据充足情况下,它可以出色完成不同领域问题。...
  • BP神经网络是一种神经网络学习算法,通常预先假定网络的结构已经确定,即已知计算单元层数,每层单元数目及单元之间连接,当输入输出之间是非线性关系及训练数据充足情况下,它可以出色完成不同领域问题。...
  • 书中精选科学和工程中常用的多个算法,全部采用MATLAB语言编程实现,并结合实例对算法程序进行验证和分析。其中详细讲解了MATLAB的基本知识、二维图形的绘制、三维图形的绘制、高级图形绘制技术、动画与视频、几何...
  • Matlab基础知识

    2009-11-13 13:50:00
    Matlab常用命令:清除matlab命令窗口中已有的内容:clc 目录:1.显示输出数据2.数组运算和矩阵运算3.多维数组在内存中存储4.用关键字input 初始化变量5.运算符优先级问题6.选择结构7.循环结构8.逻辑数组与向量...
  • Matlab是一个高级矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大复杂应用程序(M文件)后再一起运行...
  • [MatLab]1.基础知识

    2020-12-06 18:56:25
    文章目录1.1 MATLAB 环境介绍语句格式1.2 MatLab数值数据常用数学函数(2)常用函数应用取整函数 fix, floor, ceil, round判断素数函数:isprime()1.3 变量及其操作赋值语句预定义变量变量管理(1)内存变量删除...
  • MATLAB R2014a完全自学一本通》面向MATLAB 的初中级读者,在介绍MATLAB R2014a 集成环境的基础上,对MATLAB 使用中常用的知识和工具进行了详细的介绍,书中各章均提供了大量针对性的算例,供读者实战练习。...
  • 真正的MATLAB入门书、进阶、实践一本通  美国MathWorks公司推荐用书  《MATLAB R2014a完全自学一本通》结构严谨、内容全面、图文并茂、实例丰富,既适合信号处理、通信工程、自动控制、机械电子、自动化、电力电气...
  • 本章主要内容:3.1 特殊矩阵3.2 矩阵变换3.3 矩阵求值3.4 矩阵的特征值与特征向量3.5 字符串处理3.6 结构数据和单元数据3.7 稀疏矩阵3.1 特殊矩阵3.1.1 通用的特殊矩阵常用的产生通用特殊矩阵的函数:(1)zeros:...
  • 基于MATCOM的MATLAB与VC混合编程技术研究.pdf 基于MATLAB_MFC和Vega的飞机刹车视景仿真.pdf 基于Matlab与VC_混合编程的数字信号处理系统.pdf 基于MATLAB与VC_的水轮机综合特性曲线处理系统研究.pdf 基于Matlab与VC的...

空空如也

空空如也

1 2 3 4
收藏数 69
精华内容 27
热门标签
关键字:

常用的matlab数据结构有

matlab 订阅
数据结构 订阅