美文网首页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