Matlab基本数据类型

本文转载自:http://hi.baidu.com/xmf6227/blog/item/97ca2ddf98f1b61f495403cb.html

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

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

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

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

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) = {‘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]};

(2)构建单元格数组:函数方法
Cell函数。如: B = cell(2, 3); B(1,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 可以创建函数句柄,例如 [email protected],或匿名函数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)

数据类型转换如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和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。     im2double():将图像数组转换成double精度类型      im2uint8():将图像数组转换成unit8类型       im2uint16():将图像数组转换成unit16类型.

时间: 2024-08-24 04:10:33

Matlab基本数据类型的相关文章

MATLAB常用数据类型的转换

一直以来,在使用MATLAB进行运算的过程中,经常会用到对图像的各种处理,因此需要对图像进行数据转换,因此对经常用到的转换进行整理,方便查看. 1.uint8转化为double用来方便图像的运算: double函数只是将读入图像的uint8数据转换为double类型,一般不使用. 常用的是im2double函数,将uint8图像转为double类型,范围为0-1,如果是255的图像,那么255转为1,0还是0,中间的做相应改变.MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类

matlab中数据类型

在MATLAB中有15种基本数据类型,分别是8种整型数据.单精度浮点型.双精度浮点型.逻辑型.字符串型.单元数组.结构体类型和函数句柄.这15种基本数据类型具体如下. 有符号整数型:int8,int16,int32,int64. 无符号整数型:uint8,uint16,uint32,uint6. 单精度浮点型:single 双精度浮点型:double 逻辑型:logical 字符串型:char 单元数组型:cell 结构体型:struct 函数句柄型:function_handle 在程序中,建

Matlab调用外部库函数方法和注意事项

在MATLAB环境下访问外部函数的共享库文件,必须首先把该库文件加载到内存中.一旦加载成功,就 能直接在MATLAB中直接请求关于函数的任何信息.而当不再需要该库时,就应当及时把库文件从内存 中卸载以节省内存开销. 加载库 加载库加载库 加载库 语法:loadlibrary('shrlib','hfile') 其中shrlib为加载的动态链接库文件名(filename.dll),hfile为头文件名,它包含函数原型.例如,当加载包 含MATLAB中mx程序的libmx库时,可以使用下列语句. h

MATLAB编程--基础知识

:matlab,数据类型(数值,字符串),选择结构,循环接口,函数,字符串函数和矩阵,文件操作 clc clf clear abort ! diary filename->diary on->diary off which filename editpath a=[0 1+7] b=[a(2) 7 a] 定义了数组a=[0 8]和数组b=[8 7 0 8]. d = [1 2] d(4) = 4 d的值为[1 2 0 4] first:incr:last Angles = (.01:.01:1

Matlab编程知识点

容易忘记的小知识点: Matlab程序换行(一个空格加上3个.即 ...然后直接下一行就可以继续写代码) Matlab下程序计时 如下:tic和toc可以在程序中使用多个,计算各个程序字块的运行时间.还可以嵌套使用... tic;%计时开始 %%%%%%%%%%% 程序 %%%%%%%%%%% toc;%计时结束 tic和toc可以嵌套使用,都是找最近的toc总是找最近的tic,类似于if end的配合,如果想直接输出运行时间,只要类似于 disp(['拷贝去冗余的数据共花费时间:',num2s

Matlab中函数句柄@的作用及介绍

问:[email protected](x)acos(x)表示什么意思?其中@代表什么?答:表示f为函数句柄,@是定义句柄的运算符.[email protected](x)acos(x) 相当于建立了一个函数文件:% f.mfunction  y=f(x)y=acos(x); 若有下列语句:[email protected](x)1/2.*(x==-1/2)+1.*(x>-1/28&x<1/2)+1.2.*(x==-1/2); 则相当于建立了一个函数文件: % xsqual.m fun

C语言与MATLAB接口 编程与实例 李传军编着

罗列一下以前自己学习C语言与MATLAB混编的笔记,顺便复习一遍. <C语言与MATLAB接口 编程与实例 李传军编着>(未看完,目前看到P106) 目录P4-8 ****************************************************** C-MEX函数:从MATLAB调用C语言或Fortran语言编写的函数. MEX文件:是一种按一定格式,使用C语言或者FORTRAN语言编写的,由MATLAB解释器自动调用并执行的动态链接函数.在Windows系统中,MEX

Matlab special usage : @ and Struct

Background Knowledge 函数句柄:是包含了函数的路径.函数名.类型以及可能存在的重载方法. 函数句柄必须通过专门的定义创建的,而一般的图像的句柄是自动建立的. (可理解为函数指针) 创建函数句柄使用@或者str2func命令创建 [[email protected]][email protected][/email]; h_fun=str2func('fun'); 比如说sin函数,[[email protected]][email protected][/email]; h_

FORTRAN &amp; MATLAB 混合编程

[email protected] 第一部分:Fortran调用Matlab引擎 1  什么是Matlab引擎 所谓Matlab引擎(engine),是指一组Matlab提供的接口函数,支持C/C++.Fortran等语言,通过这些接口函数,用户可以在其它编程环境中实现对Matlab的控制.可以主要功能有: ★ 打开/关闭一个Matlab对话: ★ 向Matlab环境发送命令字符串: ★ 从Matlab环境中读取数据: ★ 向Matlab环境中写入数据. 与其它各种接口相比,引擎所提供的Matl