美文网首页Matlab学习笔记·
Matlab的小小笔记(数据类型)

Matlab的小小笔记(数据类型)

作者: MelonEater_plus | 来源:发表于2019-01-14 22:45 被阅读0次

    Matlab知识点

    主题 文章
    Matlab数据类型 此篇

    Matlab数据类型

    前言

    emmmm,本来手写笔记但是怕写完就扔了,看也不方便,所以记录电子版
    第一次用MarkDown,看着链接推荐跑来了简书
    也看着一篇简书文章学学基础知识

    数据类型

    字节数 类型 取值
    8 double(默认) -10^{308} \sim 10^{308}
    4 single
    uint32
    int32
    -10^{38} \sim 10^{38}
    [0,4294967295]
    [-2147483648,2147483647]
    2 uint16
    int16
    char
    [0,65535]
    [-32768,32767]
    字符
    1 uint8
    int8
    logical
    [0,255]
    [-128,127]
    0/1

    数据类型转换

    直接利用数据类型名

    >> a = [-1 0 100 255 256];
    >> whos a 
      Name      Size            Bytes  Class     Attributes
      a         1x5                40  double  
    >> b = uint8(a)
    b =
      1×5 uint8 行向量
    
         0     0   100   255   255
    >> whos b
      Name      Size            Bytes  Class    Attributes
      b         1x5                 5  uint8    
    

      其他的一些转换也是如此,即格式为期望数据 = 期望类型(原始数据)。当原始数据大于期望数据上限时候,期望数据直接取上限;反之直接取下限。所以在转换之前可用max(a(:))min(a(:))来检查原始数据的上下限,否则可能会造成数据的失真。

    利用特定转换函数im2...

    函数名 输出类型 输入类型
    im2uint8 uint8 GrayscaleImg uint8,int16,single,double
    TruecolorImg uint8,int16,single,double
    BinaryImg logical
    IndexedImg uint8,uint16,double
    GPU加速 gpuArray
    不支持 int8,char,int32,uint32
    im2uint16 uint16 logical,uint8,uint16,int16,single,double,gpuArray
    不支持 int8,char,int32,uint32
    (可以具体看看官网文件)
    mat2gray [0,1]的double 全都支持,归一化用用
    im2double double logical,uint8,uint16,int16,single,double,gpuArray
    不支持 int8,char,int32,uint32
    im2bw logical uint8,uint16,int16,single,double
    不支持 int8,char,int32,uint32,gpuArray
    可以是logical,但是没意义

    关于double/single规则会和前面有挺大的区别,分im2doublemat2gray两种情况:

    • 相同点
      uint8转换为double,可以从下面看到转换只是将每个uint8数除以255
      uint16转换过来就是除以65535
      logical转换由于本来就在[0,1]范围内,不会变
      gpuArray转换只是把数据搬到了GPU,所以转换和前面数据类型相似
    >> a = uint8([0 100;128 200]);
    >> b = im2double(a)
    b =
    
             0    0.3922
        0.5020    0.7843
    >> c=gpuArray(a)
    c =
    
      2×2 uint8 gpuArray matrix
    
         0   100
       128   200
    >> im2double(c)
    ans =
    
             0    0.3922
        0.5020    0.7843
    
    • 不同点
      体现在输入类型是double/single情况
      im2double:维持原来的数据大小
      mat2gray: 转换为[0,1]的double类型,取矩阵中max/min分别为1/0,中间数按比例转换
    >> a = double([0 100;128 200]);
    >> b = im2double(a)
    b =
    
         0   100
       128   200
    >> c=mat2gray(a)
    c =
    
             0    0.5000
        0.6400    1.0000
    
    • 补充
      double/float转换到整型呢?
      大于1的数会直接写成上极限65535,小于0则写成下极限0,中间数乘65535
    >> a = [-1 0.1;1 2]
    a =
       -1.0000    0.1000
        1.0000    2.0000
    >> whos a
      Name      Size            Bytes  Class     Attributes
      a         2x2                32  double  
    >> im2uint16(a)
    ans =
      2×2 uint16 矩阵
    
           0    6554
       65535   65535   
    

    相关文章

      网友评论

        本文标题:Matlab的小小笔记(数据类型)

        本文链接:https://www.haomeiwen.com/subject/lvojdqtx.html