个人理解:

常见数据类型:数据类型的下划线是为了区分,原本python中不加以区分的数据类型。

dtype:描述数据类型各种信息的

python中的int是灵活变动的,numpy中int对应不同的数值范围。

另外

3*0.1==0.3返回值是假,即0
因为在计算机中浮点数的表示是误差的。所以一般情况下不进行两个浮点数是否相同的比较。而是比较两个浮点数的差点绝对值,是否小于一个很小的正数。如果条件满足,就认为这两个浮点数是相同的。

常量

numpy.nan

表示空值,但注意两个numpy.nan是不相等的。

import numpy as np

print(np.nan == np.nan)  # False
print(np.nan != np.nan)  # True

 numpy.inf

表示无限大

numpy.pi

表示圆周率

pi=3.1415926...

numpy.e

表示自然常数

e=2.71828182...

常见数据类型

Numpy实践 - AI学习 - 阿里云天池 (aliyun.com)

python原生的数据类型较少,这在通常情况下是非常方便的,不需要像C/C++一样每种变量都要定义数据类型。

但是在科学计算领域,通常需要对数据进行更多的控制,为了区分这些数据,numpy在这一类数据类型名字末尾添加了“_”

numpy基本类型举例

类型

备注

说明

bool_=bool8

8位

布尔类型

int8=byte

8位

整形

int_=int64=long=int0=intp

64位

整形

float_=float64=double

64位

浮点型

数据类型对象(dtype)

数据类型对象(numpy.dtype 类的实例)用来描述与数组对应的内存区域是如何使用,它描述了数据的以下几个方面::

  • 数据的类型(整数,浮点数或者 Python 对象)
  • 数据的大小(例如, 整数使用多少个字节存储)
  • 数据的字节顺序(小端法或大端法)
  • 在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取的内存块的部分
  • 如果数据类型是子数组,那么它的形状和数据类型是什么。

创建数据类型

numpy的数值类型是dtype对象的实例,每个内建类型都有一个唯一定义它的字符代码:

字符

对应类型

备注

b

boolean

'b1'

i

signed integer

'i1', 'i2', 'i4', 'i8'

u

unsigned integer

'u1', 'u2' ,'u4' ,'u8'

f

floating-point

'f2', 'f4', 'f8'

c

complex floating-point

m

timedelta64

表示两个时间之间的间隔

M

datetime64

日期时间类型

O

object

S

(byte-)string

S3表示长度为3的字符串

U

Unicode

Unicode 字符串

V

void

【例】

import numpy as np

a = np.dtype('b1')
print(a.type)  # <class 'numpy.bool_'>
print(a.itemsize)  # 1

a = np.dtype('i1')
print(a.type)  # <class 'numpy.int8'>
print(a.itemsize)  # 1
a = np.dtype('i2')
print(a.type)  # <class 'numpy.int16'>
print(a.itemsize)  # 2
a = np.dtype('i4')
print(a.type)  # <class 'numpy.int32'>
print(a.itemsize)  # 4
a = np.dtype('i8')
print(a.type)  # <class 'numpy.int64'>
print(a.itemsize)  # 8

a = np.dtype('u1')
print(a.type)  # <class 'numpy.uint8'>
print(a.itemsize)  # 1
a = np.dtype('u2')
print(a.type)  # <class 'numpy.uint16'>
print(a.itemsize)  # 2
a = np.dtype('u4')
print(a.type)  # <class 'numpy.uint32'>
print(a.itemsize)  # 4
a = np.dtype('u8')
print(a.type)  # <class 'numpy.uint64'>
print(a.itemsize)  # 8

a = np.dtype('f2')
print(a.type)  # <class 'numpy.float16'>
print(a.itemsize)  # 2
a = np.dtype('f4')
print(a.type)  # <class 'numpy.float32'>
print(a.itemsize)  # 4
a = np.dtype('f8')
print(a.type)  # <class 'numpy.float64'>
print(a.itemsize)  # 8

a = np.dtype('S')
print(a.type)  # <class 'numpy.bytes_'>
print(a.itemsize)  # 0
a = np.dtype('S3')
print(a.type)  # <class 'numpy.bytes_'>
print(a.itemsize)  # 3

a = np.dtype('U3')
print(a.type)  # <class 'numpy.str_'>
print(a.itemsize)  # 12

数据类型信息

Python的浮点数通常是64位浮点数,几乎等同于np.float64。

NumPy和Python整数类型的行为在整数溢出方面存在显着差异,与 NumPy 不同,Python 的int 是灵活的。这意味着Python整数可以扩展以容纳任何整数并且不会溢出。

【例】

import numpy as np

ii16 = np.iinfo(np.int16)
print(ii16.min)  # -32768
print(ii16.max)  # 32767

ii32 = np.iinfo(np.int32)
print(ii32.min)  # -2147483648
print(ii32.max)  # 2147483647

ff16 = np.finfo(np.float16)
print(ff16.bits)  # 16
print(ff16.min)  # -65500.0
print(ff16.max)  # 65500.0
print(ff16.eps)  # 0.000977

ff32 = np.finfo(np.float32)
print(ff32.bits)  # 32
print(ff32.min)  # -3.4028235e+38
print(ff32.max)  # 3.4028235e+38
print(ff32.eps)  # 1.1920929e-07