matlab数据类型及转换

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab中有15种基本数据类型,主要是整型、浮点、逻辑、字符、日期和时间、结构数组、单元格数组以及函数句柄等。

1、整型:(int8;uint8;int16;uint16;int32;uint32;int64;uint64)通过intmax(class)和intmin(class) 函数返回该类整型的最大值和最小值,例如

intmax(‘int8’)=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/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

5、日期和时间

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的结构数组,该数组包含三个字段: = '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]。

(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});(3)访问结构数据

以下都是合法的结构数组访问命令:

mypatients = patient(1:2) 获取子结构数据

mypatients(1) 访问结构数据

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)。

例如,存在一个学生每周成绩数据结构数组,其数据通过以下方式建立:

= ...

[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];

= ...

[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);

相关文档
最新文档