(转)matlab数据类型及其简单的使用方法
2011-07-21 16:24
931 查看
(转)matlab数据类型及其简单的使用方法2009/03/19 16:03
转自:http://hi.baidu.com/wang_qingyuan/blog/item/d05b0efb8fada919a8d311f8.html matlab中有15种基本数据类型,主要是整型、浮点、逻辑、字符、日期和时间、结构数组、单元格数组以及函数句柄等。Matlab主要数据类型的结构图如下所失: 整型:通过intmax(class)和intmin(class) 函数返回该类整型的最大值和最小值,例如intmax(‘int8’)=127 浮点 浮点数:REALMAX('double')和REALMAX('single')分别返回双精度浮点和单精度浮点的最大值,REALMIN('double')和REALMIN ('single')分别返回双精度浮点和单精度浮点的最小值。 逻辑 Logical:下例是逻辑索引在矩阵操作中的应用,将5*5矩阵中大于0.5的元素设定为0: A = rand(5); A(A>0.5)=0 字符 Matlab中的输入字符需使用单引号。字符串存储为字符数组,每个元素占用一个ASCII字符。如日期字符:DateString=’9/16/2001’ 实际上是一个1行9列向量。构成矩阵或向量的行字符串长度必须相同。可以使用char函数构建字符数组,使用strcat函数连接字符。 例如,命令 name = ['abc' ; 'abcd'] 将触发错误警告,因为两个字符串的长度不等,此时可以通过空字符凑齐如:name = ['abc ' ; 'abcd'],更简单的办法是使用char函数:char(‘abc’,’abcd’),Matlab自动填充空字符以使长度相等,因此字符串矩阵的列纬总是等于最长字符串的字符数,例如size(char(‘abc’,’abcd’))返回结果[2,4],即字符串’abc’实际存在的是’abc ’,此时如需提取矩阵中的某一字符元素,需要使用deblank函数移除空格如name =char(‘abc’,’abcd’); deblank(name(1,:))。此外,Matlab同时提供一种更灵活的单元格数组方法,使用函数cellstr可以将字符串数组转换为单元格数组: data= char(‘abc’,’abcd’) length(data(1,:)) ->? 4 cdata=cellstr(data) length(cdata{1}) ->?3 常用的字符操作函数 blanks(n) 返回n个空字符 deblank(s) 移除字符串尾部包含的空字符 (string) 将字符串作为命令执行 findstr(s1,s2) 搜索字符串 ischar(s) 判断是否字符串 isletter(s) 判断是否字母 lower(s) 转换小写 upper(s) 转换大写 strcmp(s1,s2) 比较字符串是否相同 strncmp(s1,s2,n) 比较字符串中的前n个字符是否相同 strrep(s1,s2,s3) 将s1中的字符s2替换为s3 日期和时间 Matlab提供三种日期格式:日期字符串如’1996-10-02’,日期序列数如729300(0000年1月1日为1)以及日期向量如 1996 10 2 0 0 0,依次为年月日时分秒。 常用的日期操作函数 datestr(d,f) 将日期数字转换为字符串 datenum(str,f) 将字符串转换为日期数字 datevec(str) 日期字符串转换向量 weekday(d) 计算星期数 eomday(yr,mth) 计算指定月份最后一天 calendar(str) 返回日历矩阵 clock 当前日期和时间的日期向量 date 当前日期字符串 now 当前日期和时间的序列数 结构 结构是包含已命名“数据容器”或字段的数组。结构中的字段可以包含任何数据,例如: 构建结构数组:赋值方法 下面的赋值命令产生一个名为patient的结构数组,该数组包含三个字段: patient.name = 'John Doe'; patient.billing = 127.00; patient.test = [79 75 73; 180 178 177.5; 220 210 205]; 在命令区内输入patient可以查看结构信息: name: 'John Doe' billing: 127 test: [3x3 double] 继续赋值可扩展该结构数组: patient(2).name = 'Ann Lane'; patient(2).billing = 28.50; patient(2).test = [68 70 68; 118 118 119; 172 170 169]; 赋值后结构数组变为[1 2]。 构建结构数组:struct函数 函数基本形式为:strArray = struct('field1',val1,'field2',val2, ...) 例如: weather(1) = struct('temp', 72,'rainfall', 0.0); weather(2) = struct('temp', 71,'rainfall', 0.1); weather = repmat(struct('temp', 72, 'rainfall', 0.0), 1, 3); weather = struct('temp', {68, 80, 72}, 'rainfall', {0.2, 0.4, 0.0}); 访问结构数据 以下都是合法的结构数组访问命令: mypatients = patient(1:2) 获取子结构数据 mypatients(1) 访问结构数据 patient(2).name 访问结构数据中的特定字段 patient(3).test(2,2) 访问结构数据中的特定字段(该字段为数组) bills = [patient.billing] 访问多个结构 tests = {patient(1:2).test} 提取结构数据转换成单元格数组 使用结构字段的动态名称 通过structName.(expression)可以赋予结构字段名称并访问数据。例如字段名为expression、结构名为structName,访问其中第7行1至25列数据可以使用命令:structName.(expression)(7,1:25)。 例如,存在一个学生每周成绩数据结构数组,其数据通过以下方式建立: testscores.wang.week(1:25) = ... [95 89 76 82 79 92 94 92 89 81 75 93 ... 85 84 83 86 85 90 82 82 84 79 96 88 98]; testscores.chen.week(1:25) = ... [87 80 91 84 99 87 93 87 97 87 82 89 ... 86 82 90 98 75 79 92 84 90 93 84 78 81]; 即结构名为testscores,字段使用每个学生的名称命名,分别为wang和chen,每个学生下面包含名为week的成绩结构数组。 现计算给定结构名称、学生名称和起止周数的平均分数。 在命令窗口中输入 edit avgscore.m,输入以下代码后保存文件: function avg = avgscore(struct,student, first, last) avg = sum(struct.(student).week(first:last))/(last - first + 1); 在命名窗口中输入:avgscore(testscores, 'chen', 7, 22) 计算学生陈从第7周到第22周的平均分数。 添加和删除结构字段 命令[struct](index).(field)可添加或修改字段。如patient(2).ssn = '000-00-0000' 在结构patient中添加一个名为ssn的字段。 删除字段使用rmfield函数,如patient2 = rmfield(patient, 'name') 删除name字段并产生新的结构。 单元格数组 单元格数组提供了不同类型数据的存储机制,可以储存任意类型和任意纬度的数组。 访问单元格数组的规则和其他数组相同,区别在于需要使用花括号{}访问,例如A{2,5}访问单元格数组A中的第2行第5列单元格。 构建单元格数组:赋值方法 使用花括号标识可直接创建单元格数组,如: A(1,1) = {[1 4 3; 0 5 8; 7 2 9]}; A(1,2) = {'abcd'}; A(2,1) = {3+7i}; A(2,2) = {-pi:pi/10:pi}; 上述命令创建2*2的单元格数组A。继续添加单元格元素直接使用赋值如A(2,3)={5}即可,注意需使用花括号标识。简化的方法是结合使用花括号(单元格数组)和方括号()创建,如C = {[1 2], [3 4]; [5 6], [7 8]}; 构建单元格数组:函数方法 Cell函数。如: B = cell(2, 3); B(1,3) = {1:3}; 访问数据 通过索引可直接访问单元格数组中的数据元素,例如: N{1,1} = [1 2; 4 5]; N{1,2} = 'Name'; N{2,1} = 2-4i; N{2,2} = 7; c = N{1,2} d = N{1,1}(2,2) 函数句柄 函数句柄是用于间接调用一个函数的Matlab值或数据类型。在调用其它函数时可以传递函数句柄,也可在数据结构中保存函数句柄备用。通过命令形式 fhandle = @functionname 可以创建函数句柄,例如 trigFun=@sin,或匿名函数sqr = @(x) x.^2;。 使用句柄调用函数的形式是 fhandle(arg1, arg2, ..., argn) 或 fhandle()(无参数)。如: trigFun(1)。例: function x = plotFHandle(fhandle, data) plot(data, fhandle(data)) plotFHandle(@sin, -pi:0.01:pi) 如何在Matlab中得到一个单、双精度数的整数部分和小数部分? 对于一个单、双精度数,获得其单独的整数部分或小数部分在一些程序中有特殊的作用。如对一个数进行去模运算、对一幅图像进行剪切使其高、宽是某个数的整数倍等等。 对于取整,在C语言中有专门的取整符号[],在Matlab中三种方法实现 (1)数据类型转换 可以采用数据类型变换的方法进行。 a=12.356; b=double(uint16(a)); %这里利用了浮点数变无符号整型数时的四舍五入的特点 if a<b b=b-1; %若b>a,说明是五入的情况,故要减去1 end % b就是其整数部分 等到了整数部分,小数部分就好办了: c=a-b; (2)取余数 如果知道被除数、除数,求其商的整数部分和小数部分,这时可以采用Matlab中的去模函数mod();直接得到整数部分,当然小数部分也就得到了 m=258; n=13; m0=mod(m,n); %去模 b=(m-m0)/n; %整数部分 c=m/n-b; %小数部分 也可以使用取余数的函数rem,代替去取模函数, m=258; n=13; m0=rem(m,n); %取余数 b=(m-m0)/n; %整数部分 c=m/n-b; %小数部分 (3)直接使用相关函数 利用几个函数可以更方便快捷的得到整数部分,但其结果是有差别的,使用时请大家注意,并灵活应用。 floor(x):得到不大于x的整数值; round(x):得到最接近x 的整数值; ceil(x):得到不小于x的整数值; fix(x):得到绝对值不大于x绝对值的整数值。 举例如下: 若x=[ -1.9 -0.2 3.4 5.6 7.0 2.4+3.6i ],则floor(x)、round(x)、ceil(x)和fix(x)的值分别如下: -2.0 -1.0 3.0 5.0 7.0 2.0+3.0i -2.0 0 3.0 6.0 7.0 2.0+4.0i -1.0 0 4.0 6.0 7.0 3.0+4.0i -1.0 0 3.0 5.0 7.0 2.0+3.0i 函数fix()满足我们一般取整数部分的要求。对于正数,可以用函数floor()和fix()来代替前面的程序。 matlab中求余函数是rem 和mod rem(n,m)是求n/m的余数,余数符号与n相同 |
相关文章推荐
- 用类名做方法的返回值类型 在学习Java的初始阶段,很多同学使用基本数据类型定义变量和引用类型定义变量以及使用类名做方法的返回值类型常常不知所以。今天我以自己的解读方式和个人的理解作一个简单的解释,和
- 使用简单的json.dumps方法对简单数据类型进行编码
- DWR中调用Java对象的方法,不要使用简单数据类型
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(9):服务器端和客户端数据类型的自动转换:DataTable和DataSet
- 【Java/Android性能优 4】PreloadDataCache支持预取的数据缓存,使用简单,支持多种缓存算法,支持不同网络类型,扩展性强
- matlab—load命令读的数据为struct类型的数据的处理方法
- 使用 toString.call()方法判断数据类型
- SEL数据类型的简单知识点——和方法有关
- caffe学习之conver_imageset.bin的使用方法,caffe下图片转lmdb格式类型数据总结
- ASP.NET AJAX中 复杂数据类型使用简单实例
- Redis常用数据类型介绍、使用场景及其操作命令
- Android PreloadDataCache支持预取的数据缓存,使用简单,支持多种缓存算法,支持不同网络类型,扩展性强 (七)
- 常用sql命令@oracle数据类型概括@权限、角色、用户的创建于使用@伪列及其注意事项
- FE - Weex 使用简单封装数据加载插件为全局加载方法
- Redis系列二:Redis支持的数据类型和使用方法(二)
- iOS开发中大部分App的网络数据交换是基于HTTP协议的。本文将简单介绍在Swift中使用HTTP进行网络请求的几种方法。
- Jquery中的$.each获取各种返回类型数据的使用方法
- 使用的 SQL Server 版本不支持数据类型“date”的解决方法 (转)
- 使用系统表获得MS SQL Server表或视图的字段列表及其数据类型
- Redis常用数据类型介绍、使用场景及其操作命令