文档详情

Matlab中的基本数据类型

feng****heng
实名认证
店铺
DOCX
15.35KB
约7页
文档ID:159629884
Matlab中的基本数据类型_第1页
1/7

Matlab中有15种基本数据类型,主要是整型、浮点、逻辑、字符、日期和时间、结构数组、单元格数组以 及函数句柄等1、 整型:(int8; uint8; intl6; uintl6; int32; uint32; int64; uint64) 通过intmax(class)和 intmin(class) 函数返回该类整型的最大值和最小值,例如intmax(„int8J=127;2、 浮点:(single; double)浮点数:REALMAX('double')和REALMAX('single')分别返回双精度浮点和单精度浮点的最大值, REALMIN('double')和REALMIN ('single')分别返回双精度浮点和单精度浮点的最小值3、 逻辑:(logical)Logical:下例是逻辑索引在矩阵操作中的应用,将5*5矩阵中大于0.5的元素设定为0:A = rand(5);A(A>0.5)=0;4、 字符:(char)Matlab中的输入字符需使用单引号字符串存储为字符数组,每个元素占用一个ASCII字符如日 期字符:DateString=,9/16/200「实际上是一个1行9列向量。

构成矩阵或向量的行字符串长度必须相同 可以使用char函数构建字符数组,使用strcat函数连接字符例如,命令name = ['abc' ; 'abed']将触发错误警告,因为两个字符串的长度不等,此时可以通过空字 符凑齐如:name = ['abc ' ; 'abed'],更简单的办法是使用char函数:char('abc','abcd'),Matlab自动填充空字 符以使长度相等,因此字符串矩阵的列纬总是等于最长字符串的字符数.例如size(char(„abc,,,abcd,))返回结果[2,4],即字符串Sbc,实际存在的是Sbc此时如需提取矩阵中 的某一字符元素,需要使用 deblank 函数移除空格如 name =char(„abc,,,abcd,); deblank(name(l,:))此外,Matlab同时提供一种更灵活的单元格数组方法,使用函数cellstr可以将字符串数组转换为单 元格数组:data= char(„abc,,,abcd,)length(data(1,:)) ->? 4cdata=cellstr(data)length(cdata{l}) ->?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替换为s35、日期和时间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当前日期和时间的序列数6、 结构结构是包含已命名“数据容器”或字段的数组结构中的字段可以包含任何数据7、 构建结构数组(1) 赋值方法下面的赋值命令产生一个名为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: 127test: [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]。

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', {6& 80, 72}, 'rainfall', {0.2, 0.4, 0.0});⑶访问结构数据以下都是合法的结构数组访问命令:mypatients = patient(l:2)获取子结构数据mypatients(l)访问结构数据patient(2).name访问结构数据中的特定字段patient(3).test(2,2)访问结构数据中的特定字段(该字段为数组)bills = [patient.billing]访问多个结构tests = {patient(1:2).test}提取结构数据转换成单元格数组使用结构字段的动态名称通过structName.(expression_r_r_r)可以赋予结构字段名称并访问数据。

例如字段名为expression_r_r_r、 结构名为structName,访问其中第7行1至25列数据可以使用命令:structName.(expression_r_r_r)(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周的平均分数。

4)添加和删除结构字段命令[struct](index).(field)可添加或修改字段如 patient(2).ssn = '000-00-0000'在结构 patient 中添加一 个名为ssn的字段删除字段使用rmfield函数,如patient2 = rmfield(patient, 'name')删除name字段并产生新的结构8、单元格数组:(cell)单元格数组提供了不同类型数据的存储机制,可以储存任意类型和任意纬度的数组访问单元格数组的规则和其他数组相同,区别在于需要使用花括号{}访问,例如A{2,5}访问单元格 数组A中的第2行第5列单元格1) 构建单元格数组:赋值方法使用花括号标识可直接创建单元格数组,如:A(1,1) = {[1 4 3; 0 5 8; 7 2 9]};A(1,2) = {'abed'};A(2,1) = {3+7i};A(2,2) = {-pi:pi/10:pi};上述命令创建2*2的单元格数组Ao继续添加单元格元素直接使用赋值如A(2,3)={5}即可,注意需使 用花括号标识简化的方法是结合使用花括号(单元格数组)和方括号()创建,如C = {[1 2], [3 4]; [5 6], [7 8]};(2) 构建单元格数组:函数方法Cell函数。

如:B = cell(2, 3);B(l,3) = {1:3};(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)9、函数句柄函数句柄是用于间接调用一个函数的Matlab值或数据类型在调用其它函数时可以传递函数句柄, 也可在数据结构中保存函数句柄备用通过命令形式fhandle = @functionname可以创建函数句柄,例如 trigFun=@sin,或匿名函数 sqr = @(x) x.A2;o使用句柄调用函数的形式是fhandle(arg1, arg2, argn)或fhandle()(无参数)如: trigFun(1)例:function x = plotFHandle(fhandle, data)plot(data, fhandle(data))plotFHandle(@sin, -pi:0.01:pi)数据类型转换如C语言中的强制类型转换相似e.g.:y=9;z=double(y);Matlab中的图像数据类型转换MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double因此I2=im2double(I1) :把 图像数组I1转换成double精度类型;如果不转换,在对uint8进行加减时会产生溢出,可能提示的错误为:Function '*' is not defined for values of class 'uint8'。

图像数据类型转换函数默认情况下,matlab将图像中的数据存储为double型,即64位浮点数;matlab还支持无符号整型(uint8 和uintl6); uint型的优势在于节省空间,涉及运算时要转换成double型im2double():将图像数组转换成double精度类型im2uint8():将图像数组转换成unit8类型im2uint16():将图像数组转换成unit16类型。

下载提示
相关文档
正为您匹配相似的精品文档