Matlab知识点
主题 | 文章 |
---|---|
Matlab数据类型 | 此篇 |
Matlab数据类型
前言
emmmm,本来手写笔记但是怕写完就扔了,看也不方便,所以记录电子版
第一次用MarkDown,看着链接推荐跑来了简书
也看着一篇简书文章学学基础知识
数据类型
字节数 | 类型 | 取值 |
---|---|---|
8 | double(默认) | |
4 | single uint32 int32 |
|
2 | uint16 int16 char |
|
1 | uint8 int8 logical |
|
数据类型转换
直接利用数据类型名
>> 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 不支持 |
im2uint16 |
uint16 | logical,uint8,uint16,int16,single,double,gpuArray 不支持 (可以具体看看官网文件) |
mat2gray |
[0,1]的double | 全都支持,归一化用用 |
im2double |
double | logical,uint8,uint16,int16,single,double,gpuArray 不支持 |
im2bw |
logical | uint8,uint16,int16,single,double 不支持 可以是logical,但是没意义 |
关于double/single
规则会和前面有挺大的区别,分im2double
和mat2gray
两种情况:
-
相同点
从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
网友评论