1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > matlab 矩阵数据类型 Matlab数据类型

matlab 矩阵数据类型 Matlab数据类型

时间:2024-03-17 02:31:09

相关推荐

matlab 矩阵数据类型 Matlab数据类型

Matlab中提供了多种数据类型,以供用户在不同的情况下使用。用户可以创建浮点型或者整数型矩阵和数组、字符和字符串、逻辑(true或者false)表达式、函数句柄、结构(structure)数组、元胞(cell)数组、Map容器、日期和时间、分类(categorical)数组、表格、时间序列等。在MATLAB中任何一种数据类型都以矩阵或者数组的形式来表示。这里说的矩阵或者数组,是指最小的0x0或N维任何大小的矩阵或者数组;

3.1 数值型

包括有符号和无符号整数、单精度和双精度浮点数。默认情况下是双精度浮点数;用户不可以更改默认的数据类型和精度,但可以选择用非默认的整数或者单精度浮点数来存储矩阵或者数组;整数数组和单精度数组比双精度数组能节省更多的内存空间,灵活运用可以更高效地利用内存。

所有数值型数组都支持基本的数组操作;比如数组的重构、使用数学运算符等。

数值型数组或矩阵比较简单。

3.2 逻辑型

创建逻辑型矩阵或者数组的函数主要有以下三个:

logical函数:可以将任意类型的数组转化为逻辑型。其中非零元素为true,零元素为false.

true 函数:产生全部元素为逻辑true的数组;

false函数:产生全部元素为逻辑false的数组;

例:利用函数创建逻辑型数组;

rand('state',0)

a=rand(4,3) %生成测试矩阵

a =

0.9501 0.8913 0.8214

0.2311 0.7621 0.4447

0.6068 0.4565 0.6154

0.4860 0.0185 0.7919

复制代码

a(a<0.6)=0; %生成测试矩阵

a =

0.9501 0.8913 0.8214

0 0.7621 0

0.6068 0 0.6154

0 0 0.7919

复制代码

b=logical(a) %计算逻辑型矩阵b

b =

1 1 1

0 1 0

1 0 1

0 0 1

复制代码

c=true(size(a)) %生成全为true的矩阵

c =

1 1 1

1 1 1

1 1 1

1 1 1

复制代码

d=false([size(a),2]) %生成全为false的矩阵

d(:,:,1) =

0 0 0

0 0 0

0 0 0

0 0 0

复制代码

d(:,:,2) =

0 0 0

0 0 0

0 0 0

0 0 0

复制代码

whos %查看现有的变量与数据类型

Name Size Bytes Class Attributes

A 3x5 120 double

a 4x3 96 double

ans 1x2 16 double

b 4x3 12 logical

c 4x3 12 logical

d 4x3x2 24 logical

逻辑型数组中每一个元素仅占用一字节的内存空间。所以,尽管矩阵b和矩阵a的大小一样,但是在内存的占用上有相当大的差距,并且属于不同的数据类型;

3.2.2 返回逻辑结果的函数

下面的逻辑运算符或函数将会返回逻辑型的true或者false.

&& 具有短路作用的逻辑“与”操作,仅能处理标量;

|| 具有短路作用的逻辑“或”操作,仅能处理标量;

& 元素“与”操作

| 元素“或”操作

~ 逻辑“非”操作

xor 逻辑“异或”操作

any 当向量中的元素有非零元素时,返回true(也就是1)

all 当向量中的元素都是非零向量,返回TRUE;

== 关系运算符,等于

~= 关系运算符,不等于

< 关系运算符,小于

关系运算符,大于

<= 关系运算符,小于等于

= 关系运算符,大于等于

所有以is开头的函数 判断操作

strcmp、strncmp、strcmpi和strncmpi 字符串比较函数

需要说明的是,参与逻辑运算的数组不必是逻辑型变量或常数,也可以是其他类型的数据,但是运算结果一定是逻辑型数据。

所谓具有短路作用是指:在进行&&或||运算时,若参与运算的变量有多个,例如a&&b&&c&&d,并且a,b,c,d这四个变量中的a为false,则后面3个变量都不再处理,运算结束,并返回运算结果为false(0),

关系运算符适用于各种数据类型的变量或者常数,运算结果是逻辑型数据。标量也可以和矩阵或者数组比较,比较的时候将自动扩展标量,返回的结果是和数组同维的逻辑型数组。如果进行比较的是两个数组,则数组必须是同维的,且每一维的大小也必须一致。

例:逻辑“与”或“非”的使用。

a=[1 2 3;4 5 6];

b=[1 0 0;0 -2 1];

A=a&b

A =

1 0 0

0 1 1

复制代码

B=a|b

B =

1 1 1

1 1 1

复制代码

例:函数any 和all的使用

a=[1 1 0; 1 0 0;1 0 1]

a =

1 1 0

1 0 0

1 0 1

复制代码

A=all(a) % 每列元素均非零时返回true

A =

1 0 0

复制代码

B=any(a) %每列中存在非零元素时返回true

B =

1 1 1

复制代码

本例中,首先创建数组,因为a的第一列均为1,所以all命令返回1;而其他列含有0,所以返回0,如结果中A显示的那样。any函数在数组一列中含有非零元素时就会返回逻辑1,所以B中的元素全部为1。

例:isstrprop函数的使用。

isstrprop函数可以用来判断一个字符串中的各字符是否属于某一类别,

A =isstrprop('abc123def','alpha')

A =

1 1 1 0 0 0 1 1 1

复制代码

本例中,‘alpna’参数的作用就是判断输入字符串abc123def中那些元素属于字母,对于字母,相应地返回逻辑true,也就是1,而对于数字返回的是false,也就是0.

例:关系运算

a=[0 -1 2];

b=[-3 1 2];

a

ans =

0 1 0

复制代码

a>b %对应元素比较大小,

ans =

1 0 0

复制代码

a>=b %对应元素比较大小,

ans =

1 0 1

复制代码

a<=b %对应元素比较大小,

ans =

0 1 1

复制代码

a==b %对应元素相等

ans =

0 0 1

复制代码

a~=b %对应元素不相等

ans =

1 1 0

复制代码

3.2.3 运算符的优先级

下面将MATLAB中的运算符和计算优先级,按照从高到低的顺序进行排列。

(1)括号()。

(2)数组的转换(.'),数组幂(.^),复转置('),矩阵幂(^)。

(3)代数正(+),代数负(-),逻辑非(~)。

(4) 数组乘法(.),数组除法(./),矩阵乘法(),矩阵右除(/),矩阵左除().

(5)加法(+),减法(-)。

(6)冒号运算符(:)。

(7)小于(),大于等于(>=),等于(==),不等于(~=);

(8)元素“与”(&).

(9)元素“或”(|).

(10)短路逻辑“与”(&&)。

(11)短路逻辑“或”(||)。

3.3 字符和字符串

几个字符可以构成一个字符串,把一个字符串视为一个行向量,而字符串中的每一个字符(含空格符)则以ASCII的形式存放于此向量的每一个元素中,只是他的外显形式仍然是可读的字符,字符串类型在数据的可视化、应用程序的交互方面有着非常重要的作用。

3.3.1 创建字符串

1、一般字符串的创建

在matlab中,所有的字符串都用两个单引号括起来,进行输入赋值,如在matlab命令窗口中输入以下内容,会创建一个字符串matlab。

a='matlab'

a =

matlab

字符串的每一个字符(空格也是字符)都是相应矩阵的一个元素,上述变量a是1X6的矩阵,阶数可以用size(a)命令查得;

size(a)

ans =

1 6

复制代码

2、中文字符串的创建

中文也可以作为字符串的创建,需要注意的是,在中文字符串的输入过程中,两边的单引号必须是英文状态的单引号。例如,以下代码会创建一个中文字符串。

A='中文字符串输入演示'

A =

中文字符串输入演示

3、字符串的寻访

在matlab中,字符串的寻访可以通过其坐标来实现。在一个字符串中,matlab按照从左到右的顺序对字符串中的字符依次编号(1,2,3,...)。进行字符串的寻访,只需要像寻访一般矩阵那样即可,例如上述A,

A(3:5)

ans =

字符串

4.字符串数组的创建

二维字符串(数组)的建立也非常简单。要创建字符串数组,可以像数值数组的建立那样直接输入,也可以使用str2mat等函数;

例:多行字符串数组的直接输入。

clear

S=['This string array'

'has multiple rows']

S =

This string array

has multiple rows

size(S)

ans =

2 17

复制代码

注意:在直接输入多行字符串数组的时候,每一行的字符串个数相同。

例:使用函数str2mat 创多行字符串数组。

a=str2mat('这','字符','串数组','','由5行组成')

a =

字符

串数组

由5行组成

在使用函数str2mat创建字符串数组的时候,不用担心每一行字符个数是否相等,函数在运行中会以字符最多的一行为准,而将其他行中的字符以空格补齐。

3.3.2 比较字符串

在matlab中,有多种对字符串进行比较的功能

strcmp:判断字符串是否相等,

strncmp:判断两个字符串的前n个字符是否相等,

strcmpi和strncmpi:这两个函数的作用分别与strcmp和strncmp相同,只是在比较的过程中忽略字母的大小写。

3.3.3 查找与替换字符串

1、使用strrep函数进行字符串查找和替换

考虑有这样一个标签

label =

Sample 1,03/28/15

newlabel=strrep(label,'28','30')

函数strrep用于实现一般的查找与替换功能,如将(“03/28”替换为“03/30”,命令如下。

newlabel =

Sample 1,03/30/15

2、使用findstr函数进行字符串查找

findstr函数用于返回某一子串在整个字符串中开始的位置,例如:要在字符串中查找字母a和oo出现的位置,可以使用如下命令;

strtemp='have aa good time!'

strtemp =

have aa good time!

position1=findstr('a',strtemp)

position1 =

2 6 7

复制代码

position2=findstr('oo',strtemp)

position2 =

10

复制代码

从本例可以看出,字母a的出现在2、6、7的位置,这说明findstr包括所有出现的子串的位置,而字母‘oo’出现了一次,所以只返回一个位置信息。

strtok函数用于返回分隔字符第一次出现之前的字符。如果不自行指定分隔字符,默认的分隔字符则是泛空格字符,因此用户可以使用strtok函数将一个句子按照单词分开。

例:使用strtok函数进行字符串查找;

t='I have walked out a handful of movies in my life.'; %测试字符串

remain=t;

while true %使用while循环结构

[str,remain]=strtok(remain); %以默认的空格为分隔符查找

if isempty(str),break;end %循环跳出控制

disp(sprintf('%s',str)) %显示结果;

end

I

have

walked

out

a

handful

of

movies

in

my

life.

函数strmatch用于查找一个字符数组中以指定子串开始的字符串,该函数返回的是以指定子串开始的行编号。

例:使用strmatch进行字符串查找

maxstrings = strvcat('max','minimax','maximin') %测试字符串数组

maxstrings =

max

minimax

maximin

strmatch('max',maxstrings) %在测试字符串数组中查找以max开头的字符串

ans =

1

3

复制代码

本例中minimax虽然也包含max子串,但是这个子串不是max开头的,所以没有返回第二行的子串。

3.3.4 类型转换

数字与字符串之间的转换函数

num2str 将数字转换为字符串

int2str 将整数转换为字符串

mat2str 将矩阵转换为eval函数可以使用的字符串;

str2double 将字符串转换为双精度类型的数据;

str2num 将字符串转换为数字;

sprintf 格式化输出数据到命令窗口

sscanf 读取格式化字符串

不同数值之间的转换函数

hex2num 将16进制整数字符串转换为双精度数据;

hex2dec 将16进制整数字符串转换为十进制数据;

dec2hex 将十进制字符串转换为十六进制整数字符串;

bin2dec 将2进制字符串转换为10进制整数;

dec2bin 将十进制整数转换为2进制字符串;

base2dec 将指定数制类型的数字字符串转换为10进制整数;

dec2base 将十进制整数转换为指定数制类型的数字字符串;

例:用法示例

a=['1 2';'3 4'] %创建一个字符串数组

a =

1 2

3 4

b=str2num(a) %将字符串转换为数值形式

b =

1 2

3 4

复制代码

c =str2num('1+2i') %将字符串转换为数值形式

c =

1.0000 + 2.0000i

d=str2num('1 +2i') %将字符串转换为数值形式

d =

1.0000 + 0.0000i 0.0000 + 2.0000i

e=num2str(rand(3,3),6) %将数值转换为字符串形式

e =

0.814724 0.913376 0.278498

0.905792 0.632359 0.546882

0.126987 0.0975404 0.957507

whos

Name Size Bytes Class Attributes

a 2x3 12 char

b 2x2 32 double

c 1x1 16 double complex

d 1x2 32 double complex

e 3x34 204 char

详细信息查阅matlab的help文档

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。