MATLAB的数据类型

Posted sinlearn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB的数据类型相关的知识,希望对你有一定的参考价值。

MATLAB中有15种基本数据类型,其中常用的数据类型主要是整型、浮点型、逻辑类型、结构体、元胞数组及字符串等。

整型

>> x = int8(12)

x =

  int8

   12

>> y = uint16(x)

y =

  uint16

   12

>> A = zeros(3, ‘uint8‘) 
% 生成全零矩阵
A =

  3×3 uint8 矩阵

   0   0   0
   0   0   0
   0   0   0
   
   
>> intmin(‘int8‘)
% 确定整型数据类型的数据范围
ans =

  int8

   -128

>> intmax(‘int8‘)

ans =

  int8

   127

浮点型

>> a = single(32)
% 单精度
a =

  single

    32
    
 >> b = double(10000)
%双精度
b =

       10000
 >> z = 10
% 默认为双精度
z =

    10
>> B = ones(3,‘single‘)
% 三个单精度全1矩阵
B =

  3×3 single 矩阵

     1     1     1
     1     1     1
     1     1     1
     
 >> realmin(‘double‘)
% 浮点型数据的取值范围查询
ans =

  2.2251e-308

>> realmax(‘double‘)

ans =

  1.7977e+308

逻辑类型

% 1. if 语句的判断
>> a = 5;
>> if a > 0
     disp(‘大于0‘)
   else
     disp(‘小于0‘)
   end
大于0
% 2. 查找矩阵中符合一定条件的数据
>> a = magic(3)

a =

     8     1     6
     3     5     7
     4     9     2

>> a > 5

ans =

  3×3 logical 数组

   1   0   1
   0   0   1
   0   1   0
% 3. 逻辑运算

>> x = [1 2 3 -2 0 -1];
>> ~ x  
% x中元素为0 则返回"1",否则返回“0”
ans =

  1×6 logical 数组

   0   0   0   0   1   0

字符串

字符串的生成

一维字符串的生成

% 1. 一维字符串的生成
% 1.1 直接赋值发
>> str = "ABCDE"

str = 

    "ABCDE"
    
 % 1.2 连接法
>> str1 = strcat(str,"FGH")

str1 = 

    "ABCDEFGH"
    
>> str2 = [str1, "STR"]

str2 = 

  1×2 string 数组

    "ABCDEFGH"    "STR"

>> str3 = [str1,str2]

str3 = 

  1×3 string 数组

    "ABCDEFGH"    "ABCDEFGH"    "STR"

二维字符串的生成

 % 2. 二维字符串的生成    
 >>  str1 = [‘abcd‘;‘efg‘] % 注意二维数组在创建时要保证每行列数相同,不然会报下面的错误
	要串联的数组的维度不一致。  
  
 >>  str1 = [‘abcd‘;‘efg ‘]
% 空格填充
str1 =

  2×4 char 数组

    ‘abcd‘
    ‘efg ‘
    
 >> str2 = char(‘ABC‘,‘DE‘)
% 通过char()创建二维字符串
str2 =

  2×3 char 数组

    ‘ABC‘
    ‘DE ‘
    
 >> str3 = strvcat(str1,str2)
% 字符串的垂直连接
str3 =

  4×4 char 数组

    ‘abcd‘
    ‘efg ‘
    ‘ABC ‘
    ‘DE  ‘   

字符串的操作

字符串的判断

% 1. 字符串的判断
>> str1
str1 =
  2×4 char 数组
    ‘abcd‘
    ‘efg ‘

>> ischar(str1)
% 判断是否为字符串
ans =

  logical

   1
 >> isletter(str1)
% 判断每个字符是否为字母
ans =

  2×4 logical 数组

   1   1   1   1
   1   1   1   0	
 >> isspace(str1)
% 判断每个字符是否为空格
ans =

  2×4 logical 数组

   0   0   0   0
   0   0   0   1

字符串的访问

% 2. 字符串的访问
>>  str1 = char(‘abc‘,‘d f‘,‘ lee3‘)

str1 =

  3×5 char 数组

    ‘abc  ‘
    ‘d f  ‘
    ‘ lee3‘
    
>> str1(1,:)
% 访问字符串中的第1行
ans =

    ‘abc  ‘
    
>> str1(1,2)
% 访问第1行第2个元素
ans =

    ‘b‘
    
>> str1([1,2])
% 索引访问第1,2行首个元素
ans =
    ‘ad‘
    
>> str1([1,2],[2,3])
% 访问第1行2、3个元素和第2行2、3个元素
ans =
  2×2 char 数组

    ‘bc‘
    ‘ f‘

字符串的查找与替换

%3. 字符串的查找与替换
>> str1 = ‘Specify character data by placing characters inside a pair of single qutes‘;
>> k = strfind(str1, ‘ar‘)
% 查找指定字符串,返回其位置
k =

    11    37

>> k = strfind(str1,‘are‘)
% 不存在返回空列表
k =

     []

>> k = findstr(str1,‘are‘)

k =

     []

>> k = findstr(str1,‘ar‘)

k =

    11    37

>> strrep(str1,‘ar‘,‘are‘)
% 替换字符串中的字符
ans =

    ‘Specify chareacter data by placing chareacters inside a pair of single qutes‘

>> i = strmatch(‘min‘,strvcat(‘min‘,‘minimax‘,‘maximum‘))
% 字符串中匹配查找
i =

     1
     2

>> i = strmatch(‘min‘,strvcat(‘min‘,‘minimax‘,‘maximum‘),‘exact‘)
% 查找其精确位置
i =

     1

字符串的比较

% 4. 字符串的比较
>> str1 = ‘ABC‘;
>> str2 = ‘ABC‘;
>> str3 = ‘abc‘;
>> str4 = ‘ABCD‘;
>> k1 = strcmp(str1,str2)
% 比较字符串,相等返回1 
k1 =

  logical

   1

>> k2 = strcmp(str1,str3)
% 不相等返回0
k2 =

  logical

   0

>> k3 = strcmpi(str1,str3)
% 不区分大小写的比较
k3 =

  logical

   1

>> k4 = strncmp(str1,str4,3)
% 比较两个字符串的前n位是否相同
k4 =

  logical

   1

字符串的大小写转换

%5. 字符串的大小写转换
>>  str = "Hello MATLAB";
>> s  = lower(str)

s = 

    "hello matlab"

>> s = upper(str)

s = 

    "HELLO MATLAB"

字符串的执行 (eval()函数)

% 6. 字符串的执行 (eval()函数)
>> A = rand(3)

A =

    0.9649    0.9572    0.1419
    0.1576    0.4854    0.4218
    0.9706    0.8003    0.9157

>> eval(‘length(A)‘) % 此处直接执行字符串

ans =

     3
     
 >> [I,J] = eval(‘size(A)‘)

I =

     3


J =

     3
     
>> for i = 1:3   % 实现分别给a1,a2,a3赋值操作
     eval([‘a‘,num2str(i),‘=2*i‘])
end

a1 =

     2

a2 =

     4

a3 =

     6     

元胞数组

元胞数组的创建

直接赋值法创建元胞数组

% 1. 直接赋值法创建元胞数组
%1.1 元素下标使用
>> a{1,1} = 8;
>> a{1,2} = ‘cell study‘;
>> a{2,1} = magic(3);
>> a{2,2} = magic(3)> 5;
>> a

a =

  2×2 cell 数组

    {[       8]}    {‘cell study‘}
    {3×3 double}    {3×3 logical }
    
>> b{1,1} = {8};
>> b{1,2} = {‘cell study‘};
>> b{2,1} = {magic(3)};
>> b{2,2} = {magic(3) > 5};
>> b

b =

  2×2 cell 数组

    {1×1 cell}    {1×1 cell}
    {1×1 cell}    {1×1 cell}    

cell()函数创建元胞数组

 % 2. cell()函数创建元胞数组   
 >> a = cell(2)
 
a =

  2×2 cell 数组

    {0×0 double}    {0×0 double}
    {0×0 double}    {0×0 double}

>> a = {1,‘c‘,2,cell(3)}   

元胞数组的操作

访问元胞数组

% 1. 访问元胞数组
>> a = {8, ‘cell study‘;magic(3), magic(3) > 5}

a =

  2×2 cell 数组

    {[       8]}    {‘cell study‘}
    {3×3 double}    {3×3 logical }

>> a{1,1}

ans =

     8

>> a{1,:}

ans =

     8


ans =

    ‘cell study‘

>> a{:,2}

ans =

    ‘cell study‘


ans =

  3×3 logical 数组

   1   0   1
   0   0   1
   0   1   0

>> a{2,2}(1,1)

ans =

  logical

   1
 >>  a{2,2}(1,1) + 1

ans =

     2  
     
 >> a(1,1)

ans =

  1×1 cell 数组

    {[8]}

>> a(1,1) + 1  %小括号访问不能修改值
未定义与 ‘cell‘ 类型的输入参数相对应的运算符 ‘+‘。

元胞数组的显示

% 2. 元胞数组的显示
>> celldisp(a)
 
a{1,1} =
 
     8

 
 
a{2,1} =
 
     8     1     6
     3     5     7
     4     9     2

 
 
a{1,2} =
 
cell study
 
 
a{2,2} =
 
   1   0   1
   0   0   1
   0   1   0
   
 >> celldisp(a,‘s‘) % 以s为元胞数组命名
 
s{1,1} =
 
     8

 
 
s{2,1} =
 
     8     1     6
     3     5     7
     4     9     2

 
 
s{1,2} =
 
cell study
 
 
s{2,2} =
 
   1   0   1
   0   0   1
   0   1   0
>> cellplot(a) % 以图形化的方式显示元胞数组

技术图片

删除元胞数组的内容

% 3.删除元胞数组的内容
>> a{1,1} = []

a =

  2×2 cell 数组

    {0×0 double}    {‘cell study‘}
    {3×3 double}    {3×3 logical }

>> a{1,1}

ans =

     []

结构体

结构体的生成

直接赋值法

%1. 直接赋值法
>> ss.name = ‘matlba‘;
>> ss.age = 2019;
>> ss.num = [5:2:16];
>> ss

ss = 

  包含以下字段的 struct:

    name: ‘matlba‘
     age: 2019
     num: [5 7 9 11 13 15]

函数法

% 2. 函数法 
>> ss1 = struct(‘name‘,‘matlab‘,‘age‘,2019,‘num‘,[5:2:16])
% struct()函数创建结构体
ss1 = 

  包含以下字段的 struct:

    name: ‘matlab‘
     age: 2019
     num: [5 7 9 11 13 15]

结构体的操作

访问结构体中的元素

% 1. 访问结构体中的元素
>> stu = struct(‘sname‘,{‘xiaoming‘,‘xiaoli‘,‘xiaochen‘},‘sage‘,{20,21,22})

stu = 

  包含以下字段的 1×3 struct 数组:

    sname
    sage

>> stu(:,1)

ans = 

  包含以下字段的 struct:

    sname: ‘xiaoming‘
     sage: 20

>> stu(1)

ans = 

  包含以下字段的 struct:

    sname: ‘xiaoming‘
     sage: 20

>> stu.sname

ans =

    ‘xiaoming‘


ans =

    ‘xiaoli‘


ans =

    ‘xiaochen‘

>> stu(1).sname

ans =

    ‘xiaoming‘

结构体的显示

% 2. 结构体的显示
 >> names = fieldnames(stu)
% 显示结构体的域名
names =

  2×1 cell 数组

    {‘sname‘}
    {‘sage‘ }

>> f = getfield(stu,‘sname‘)
% 显示域名中的内容
f =

    ‘xiaoming‘

结构体的删除

% 3. 结构体的删除
 >> s = rmfield(stu,‘sage‘)

s = 

  包含以下字段的 1×3 struct 数组:

    sname


以上是关于MATLAB的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

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

在代码片段中包含类型转换

mex 编译错误:Matlab 数据类型和函数的预期表达式错误

matlab 为啥要进行数据类型转换?

对这个带有 & 不带 = 的代码片段返回类型感到非常困惑

matlab数据类型转换——int8转换成unit8