Matlab中的数据类型
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
常用的字符操作函数
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))
textscan 参照:
1.http://www.cnblogs.com/AI-Algorithms/p/3670245.html
2.Matlab >> help textscan
源文档 <http://blog.sina.com.cn/s/blog_542a1e4a0100sjpp.html>
Escape Characters
|
Character |
Description |
|
\n |
New line |
|
\t |
Horizontal tab |
|
\b |
Backspace |
|
\r |
Carriage return |
|
\f |
Form feed |
|
\\ |
Backslash |
|
\'' or '' (two single quotes) |
Single quotation mark |
|
%% |
Percent character |
Conversion characters specify the notation of the output.
Conversion Specifiers
|
Specifier |
Description |
|
%c |
Single character |
|
%d |
Decimal notation (signed) |
|
%e |
Exponential notation (using a lowercase e as in 3.1415e+00) |
|
%E |
Exponential notation (using an uppercase E as in 3.1415E+00) |
|
%f |
Fixed-point notation |
|
%g |
The more compact of %e or %f, as defined in [2]. Insignificant zeros do not print. |
|
%G |
Same as %g, but using an uppercase E |
|
%o |
Octal notation (unsigned) |
|
%s |
String of characters |
|
%u |
Decimal notation (unsigned) |
|
%x |
Hexadecimal notation (using lowercase letters a-f) |
|
%X |
Hexadecimal notation (using uppercase letters A-F) |
Other characters can be inserted into the conversion specifier between the % and the conversion character.
Other Characters
|
Character |
Description |
Example |
|
A minus sign (-) |
Left-justifies the converted argument in its field. |
%-5.2d |
|
A plus sign (+) |
Always prints a sign character (+ or -). |
%+5.2d |
|
Zero (0) |
Pad with zeros rather than spaces. |
.2d |
|
Digits (field width) |
A digit string specifying the minimum number of digits to be printed. |
o |
|
Digits (precision) |
A digit string including a period (.) specifying the number of digits to be printed to the right of the decimal point. |
|
fscanf
|
format |
String enclosed in single quotation marks that describes each type of element (field). Includes one or more of the following specifiers.
|
源文档 <http://blog.sina.com.cn/s/blog_65956f180100udlf.html>
Matlab中的数据类型的更多相关文章
- $ 一步一步学Matlab(3)——Matlab中的数据类型
小学时候我们就知道,数学中有自然数.整数.分数.小数等等很多种类型的数.到了中学,我们又发现了其实还有无理数.复数这些有些特殊的数.到了大学学了高等数学之后,我们又知道了其实还存在着无穷大.无穷小这样 ...
- Matlab中的基本数据类型介绍
Matlab中支持的数据类型包括: 逻辑(logical)字符(char)数值(numeric)元胞数组(cell)结构体(structure)表格(table)函数句柄(function handl ...
- matlab中读取txt数据文件(txt文本文档)
matlab中读取txt数据文件(txt文本文档) 根据txt文档不同种类介绍不同的读取数据方法 一.纯数据文件(没有字母和中文,纯数字) 对于这种txt文档,从matalb中读取就简单多了 例如te ...
- MATLAB中的结构数组
MATLAB中的结构数组 结构数组: 结构是包含一组记录的数据类型,而记录则是存储在相应的字段中.结构的字段可以是任意一种MATLAB数据类型的变量或者对象.结构类型的变量也可以是一维的.二维的或多维 ...
- Matlab中函数句柄@的作用及介绍
问:f=@(x)acos(x)表示什么意思?其中@代表什么?答:表示f为函数句柄,@是定义句柄的运算符.f=@(x)acos(x) 相当于建立了一个函数文件:% f.mfunction y=f(x) ...
- matlab中关于函数句柄、feval函数以及inline函数的解析 (转)
http://blog.sina.com.cn/s/blog_7bff755b010180l3.html MATLAB函数句柄 函数句柄(Function handle)是MATLAB的一种数据类型. ...
- 如何使用matlab中的胞元数组
胞元数组(cell Arry)的基本组分是胞元(cell),每个胞元本身在数组中是平等的,只能以下标区分.胞元可以存放任何类型.任何大小的数组,如任意维数值数组.字符串数组.符号对象等,而且同一个胞元 ...
- matlab中图片数据类型转换uint8与double
matlab中处理图像像素点数据: img1=double(imread('lenna.bmp')); matlab中imshow图片,要先转换成uint8: subplot(1,2,1),imsho ...
- matlab的table数据类型初步接触
由于数据分析,接触到cell的使用,字符串的使用以及ASCII的使用,但是发现在matlab中进行这样的操作相对繁琐,然后知道了table数据类型,是matlab新的数据类型,于2013版开始引入.据 ...
随机推荐
- iOS之 PJSIP静态库编译(三)
dada哪个所有静态库编译完成后还是不能运行那个demo,提示你找不到arm**.a 你lipo后要记得吧合并成.a 名字更改成你最后编译版本生成的.a名字....... 或者吧所有库add到你的工 ...
- 如何创建可扩展表视图中的iOS 学习和拓展优化(有待更新)
首先介绍老外的文章:<How To Create an Expandable Table View in iOS>这是老外用Swift实现 的,对应的老外github项目源码:https: ...
- HTTP 请求方式: GET和POST的比较当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。
什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议. HTTP在客户端和服务器之间以request ...
- 敏捷软件开发(1)--- STATE 模式
如果状态在运行过程中,不停的切换和改变,我们怎么办? 状态的迁移是我们生活和工程中非常普遍的一个概念.于是在数学上有一种理论来分析和解决这个问题. 有限状态机理论是一个非常成熟的理论,所有动作和流程的 ...
- Memcache笔记05-Memcache安全性
Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄露被其他无关人员查看,重则服务器被入侵,因为Mecache是以 ...
- mongo学习笔记(五):分片
分片 人脸: 代表客户端,客户端肯定说,你数据库分片不分片跟我没关系,我叫你干啥就干啥,没什么好商量的. mongos: 首先我们要了解”片键“的概念,也就是说拆分集合的依据是什么?按照 ...
- JavaScript中的不可见数据类型
JS提供了一些内置对象.函数和构造器供我们编程,如Math.parseInt.Object.Array等.这些都是可见的,编程时可以使用的.比如我可以new Object 或 new Array. 有 ...
- 虚拟机centos6.5 --设置主机名
vi /etc/sysconfig/network #修改HOSTNAME后面的值,机器名 vi /etc/hosts #设置ip和机器名的对应关系 192.168.12.232 master 192 ...
- Android 系统架构
Android 系统从下至上分为四层:Linux 内核.Android 核心库及Android 运行时环境(Android Runtime). 应用程序框架以及应用程序等. Linux 内核(Linu ...
- Shell basic1
A shell script is a text file that typically begins with a shebang, as follows: #!/bin/bash /bin/bas ...