数值(Python中称为数字)包括整型和浮点型,是最常用的基本数据类型之一。[大谦MATLAB,dqmatlab点com]
整型数值(数字)
【MATLAB】
MATLAB中的整型数据类型可以定义一定范围内的整型值。例如,int8型数据可以表示—128~127的任何8位无符号整数。该数据类型在保存只能用整型保存的数据(例如图像数据)时很有用。表2-4列出了各种整型数据类型的取值范围。
表2-4 MATLAB中的整型数据类型及其值的范围
| 数 据 类 型 | 描 述 | 值 的 范 围 |
|---|---|---|
| int8 | 有符号8位整数 | 128~127 |
| uint8 | 无符号8位整数 | 0~255 |
| int16 | 有符号16位整数 | 215~2151 |
| uint16 | 无符号16位整数 | 0~2161 |
| int32 | 有符号32位整数 | 231~2311 |
| uint32 | 无符号32位整数 | 0~2321 |
| int64 | 有符号64位整数 | 263~2631 |
| uint64 | 无符号64位整数 | 0~2641 |
使用整型数值类型名称对应的函数,可以将值或变量转换为整型。在命令窗口中输入
>> x=int8(5)
将x的值设置为5,数据类型设置为int8型。可以用class函数确认变量的数据类型。例如:
>> class(x)
ans=
'int8'
【Python】
整型数字没有小数点,可有正负之分。Python 3中的整型没有短整型和长整型之分。
>>> a=10
>>> a
10
>>> b=-100
>>> b
-100
Python中整型值没有大小限制,可以表示很大的数,不会溢出,例如:
>>> c=99999999999999999999999
>>> c
99999999999999999999999
为了提高代码的可读性,可以给数字增加下划线作为分隔符,例如:
>>> d=123_456_789
>>> d
123456789
可以用十六进制或八进制表示整数。常用十六进制整数表示颜色,比如可用0x0000FF表示红色:
>>> e=0x0000FF
>>> e
255
浮点型数值(数字)
【MATLAB】
默认时,MATLAB指定数据为double型,表示64位的双精度浮点型。MATLAB用双精度计算操作double型数据。对大部分数值计算任务而言,推荐使用double型。
下面在命令窗口中给变量a赋值3,用class函数查看变量a的数据类型。
>> a=3
a =
3
>> class(a)
ans =
'double'
可见,变量a的数据类型为double型,即MATLAB默认的数值类型是double型。
除双精度浮点型外,数值变量还有单精度浮点型,即single型。
下面用single命令将数值或变量指定为single型。在命令窗口中输入
>> a=single(5)
将a的值设置为5,数据类型设置为single型。
将数据保存为single型时所需要的内存只占保存为double型时的一半。可以用whos命令进行比较,例如:
>> b=5;
>> whos
Name Size Bytes Class
a 11 4 single
b 11 8 double
函数eps返回浮点数的精度。所谓精度,指的是该浮点数与下一个浮点数之间的差值。例如:
>> format long
>> eps(5)
ans=
8.881784197001252e-16
其中,format命令设置变量的输出格式为小数点后面保留15位小数。
【Python】
Python 3中,浮点型数字没有单精度浮点型和双精度浮点型之分。浮点型数字带小数,可以有十进制和科学计数法两种表示形式。比如31.415这个浮点数可以表示为:
>>> a=31.415
>>> a
31.415
或
>>> a=3.1415e1
>>> a
31.415
注意,科学计数法返回的数字是浮点型的,即使字母e前面是整数也是这样。
>>> b=1e2 #100
>>> type(b)
<class 'float'>
整数和浮点数混合运算时,MATLAB中计算结果为整型,Python中计算结果则为浮点型。例如下面计算一个整数和一个浮点数的和:
【MATLAB】
>> a=int8(10);
>> b=1.123;
>> c=a+b;
>> class(c)
ans =
'int8'
【Python】
>>> a=10
>>> b=1.123
>>> c=a+b
>>> type(c)
<class 'float'>
复数
Python支持复数。复数由实部和虚部组成,可以用a+bj或者complex(a,b)表示。复数的实部a和虚部b都是浮点型数字。
下面创建几个复数变量:
>>> a=1+2j
>>> a
(1+2j)
>>> type(a)
<class 'complex'>
>>> b=-3j
>>> b
(-0-3j)
>>> c=complex(2,-1.2)
>>> c
(2-1.2j)
>>> type(c)
<class 'complex'>
其中变量b表示的复数只有虚部,实部自动设置为0。
类型转换
【MATLAB】
使用int8, int16, single, double等函数可以将其他数值类型转换为指定的数值类型。把数值转换为一种整型数据类型时,MATLAB会将结果圆整到最近的整型值。
在命令窗口中输入
>> int8(2.7)
ans=
3
对于小数位为5的情况,如果数值为正,则向上圆整,否则向下圆整。
>> int8(2.5)
ans=
3
>> int8(-2.5)
ans=
-3
将大于整型数据类型最大值的数据转换为该整型时,MATLAB返回最大值。
>> int8(300)
ans=
127
同样,在转换时,如果数据值小于数据类型的最小值,则返回最小值,通常这被称为饱和溢出。
两个不同精度的数据进行运算时,先将高精度的数据转换为低精度数据,然后进行计算。
在命令窗口中输入
>> x=int32(5)+9.5
x=
15
>> class(x)
ans=
'int32'
其中,5是双精度浮点型的。
注意:整数只能与相同类型的整数或双精度浮点型值一起进行运算。
【Python】
Python中浮点型转换为整型时直接将小数部分去掉,而不是进行四舍五入。
>>> e=1.678 #浮点数转换为整数
>>> f=int(e)
>>> f
1
>>> type(f)
<class 'int'>
可见,浮点数1.678转换为整型数字后变成了1,小数部分直接去掉了。
Python的整数缓存机制
在命令行模式下,Python对范围在[-5,256]内的整数对象进行缓存。这些比较小的整数被使用的频率比较高,如果不进行缓存,每次使用它们的时候都要进行分配内存和释放内存的操作,会大大降低运行效率,并造成大量内存碎片。现在将它们缓存在一个小整型对象池中,能提高Python的整体性能。
下面给两个变量都赋值100,用is比较它们的内存地址。
>>> a=100
>>> b=100
>>> a is b
True
可见,它们的地址是相同的。所以,赋值100给a以后的变量,它们都指向同一个对象,而不是重新分配内存空间。
下面给两个变量都赋值500,用is比较它们的内存地址。
>>> a=500
>>> b=500
>>> a is b
False
因为500超出了[-5,256]的范围,命令行模式下Python不再提供缓存,所以a和b指向两个不同的对象。
注意:在Pycharm或者保存为文件执行时,提供缓存的数字范围更大,为[-5,任意正整数]。