Matlab小笔记(数据类型)

Matlab知识点

主题 文章
Matlab数据类型 此篇

Matlab数据类型

前言

emmmm,本来手写笔记但是怕写完就扔了,看也不方便,所以记录电子版

Matlab小笔记(数据类型)_第1张图片

数据类型

字节数 类型 取值
8 double(默认) − 1 0 308 ∼ 1 0 308 -10^{308} \sim 10^{308} 1030810308
4 single
uint32
int32
− 1 0 38 ∼ 1 0 38 -10^{38} \sim 10^{38} 10381038
[ 0 , 4294967295 ] [0,4294967295] [0,4294967295]
[ − 2147483648 , 2147483647 ] [-2147483648,2147483647] [2147483648,2147483647]
2 uint16
int16
char
[ 0 , 65535 ] [0,65535] [0,65535]
[ − 32768 , 32767 ] [-32768,32767] [32768,32767]
字 符 字符
1 uint8
int8
logical
[ 0 , 255 ] [0,255] [0,255]
[ − 128 , 127 ] [-128,127] [128,127]
0 / 1 0/1 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,code,matlab,数据类型)