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 可以创建函数句柄,例如 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)

数据类型转换如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类型

//

%假设你的文件名在c盘 叫test.txt
fid=fopen('c:\test.txt'); data=textscan(fid,'%s','delimiter','\n');%把数据按行读入 fclose(fid);%关闭文件 data=data{1,1}; A=textscan(data{1},'%n','delimiter',' ');把第一行按空格为分割赋给A B=textscan(data{2},'%n','delimiter',' ');同上B C=textscan(data{3},'%n','delimiter',' ');同上C A=A{1};B=B{1};C=C{1};把A,B,C由cell转成向量 %这样的话无论这三行分别有多少个数据都可以的。
截取字符串部分:str(2:length(str)-1))
   数据类型之间的转换
至于数据类型的转换可以用类似于C/C++使用强制类型转换,比如double类型的数值a=1.234;转换为整型数据可以直接用uint8(a);得到的结果是四舍五入后的整数值(上面的例子得到的是1)。其中uint分很多种,大家可以自己查一下matlab帮助文档,了解相关函数用法.

Matlab的数据类型及相互转换相关推荐

  1. .mat,.txt,.csv 数据转换为weka中的arff格式及matlab和Weka之间相互转换格式

    在RUSBoost和SMOTEBoost中提供了csv转换为arff格式的方法,详见CSVtoARFF.m http://www.mathworks.com/matlabcentral/fileexc ...

  2. MATLAB 基本数据类型和调用方式

    MATLAB的数据类型     MATLAB的数据类型主要包括数字.字符串.矩阵(数组).单元型数据及结构型数据.能自动根据所赋予的值或对变量所进行的操作来确定变量的类型 . 2.1.1变量与常量 1 ...

  3. MATLAB学习——数据类型(结构体、数组、单元数组、map容器类型)

    本篇文章对Matlab中的剩余数据类型进行介绍,它们分别为结构体类型.数组类型.单元数组类型.map容器类型. 结构体类型 与C语言中的结构体类型相似,Matlab中的结构体也可以通过字段存储多个不同 ...

  4. Matlab图像数据类型unit8,double关系

    matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,相比较matlab默认数据类型双精度浮点double(64位,8个字节)可以节省存储空 ...

  5. Matlab图像数据类型unit8与double

    一.数据类型 uint16 :无符号16bit整数, unit8:无符号8bit整数, int8:有符号8bit整数. double:有符号64bit浮点数.(8bit即一个字节) 二.图像数据类型 ...

  6. MATLAB中的数据从double类型强制转化为uint8其舍入用的是四舍五入,附MATLAB基本数据类型

    MATLAB中的数据从double类型强制转化为uint8其舍入用的是四舍五入, 例子代码如下: A=[0.1 0.2 0.3;0.4 0.5 0.6;0.7 0.8 0.9]; B=uint8(A) ...

  7. matlab的数据类型ppt,MATLAB数据类型

    MATLAB数据类型 默认情况下,MATLAB ®存储所有数值变量为双精度浮点值.其他数据类型存储文本,整数或单精度值或单个变量中相关数据的组合. MATLAB不需要任何类型声明或维度语句.当MATL ...

  8. matlab gui数据类型,MatLab GUI 数据传递

    1.数据怎么在不同的控件之间传递 先看在一个GUI界面内部的传递的数据 每一个控件的回调函数头: function myc_Callback(hObject, eventdata, handles) ...

  9. 【MATLAB】数据类型 ( 元胞数组 | 单位阵 | 幻方 | 结构体 | 元胞数组值获取 )

    文章目录 一.元胞数组 1.定义元胞数组 2.生成单位阵 3.生成幻方 4.元胞数组元素赋值 5.元胞数组元素赋值 二 二.元胞数组 1.定义结构体 2.小括号获取元胞数组子数组 3.大括号获取元胞数 ...

  10. C# 数据类型及相互转换及常用基础

    C#的数据类型可以分为3类:数值类型.引用类型.指针类型.指针类型仅在不安全代码中使用. 值类型包括简单类型(如字符型.浮点型和整数型等).集合类型和结构型. 引用类型包括类类型.接口类型.代表类型和 ...

最新文章

  1. 【Pandas库】(4) 索引操作--重新生成索引
  2. 微信小程序button授权页面,用户拒绝后仍可再次授权
  3. 全球及中国凝胶植入物市场专项调研与供需现状分析报告2022年
  4. Tengine HTTPS原理解析、实践与调试
  5. 参数返回Oracle 常用函数:nvl/nullif/case when/wm_concat/replace
  6. 蛋制品加工行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  7. Java Colections 集合类 —— List、ArrayList、Set(HashSet)
  8. An effective intrusion-resilient mechanism for PLCs against data tampering attacks
  9. FRM-18108 FRM-10102错误解决
  10. 使用cd-hit对核酸序列或氨基酸序列聚类
  11. 贪心算法解决汽车加油问题
  12. FinalShell连接VM出现channel is not opened.
  13. oracle按照汉语拼音排序
  14. linux永久修改dns
  15. Linux中磁盘的管理(格式化、分区、挂载)
  16. VS中C++导入并使用DLL文件使用步骤
  17. AI顶级期刊 IEEE T-PAMI 2020最新论文解读 | Deep Partial Multi-View Learning
  18. 华为S系列交换机修改密码不成功
  19. Linux 操作系统之文件服务
  20. SDNU-1012.区间合并

热门文章

  1. 第二季-专题18-网卡搭建新通道
  2. Ajax_使用 jQuery 实现Ajax
  3. EF中CodeFirst中实体变化的处理方式
  4. python3.6安装pyspider
  5. Google Play在GDC大会上发布全新工具及游戏
  6. 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载 【转】...
  7. nginx编译和调试
  8. 为什么象网络蚂蚁这样的多线程程序可以加快下载速度?
  9. Android基础 (八)手机多媒体
  10. 设置Emeditor为Python的简易开发工具