Numpy数据类型

Python的易用之处在于动态输入,每个变量的数据类型是动态推断的,而C语言的是被明确地声明。

Python的数据类型其实是一个Python对象,每一个Python对象都是一个聪明的伪C语言结构体,该结构体不仅包含值,也包含其它信息。在定义一个Python对象时,其实是定义一个指针,指向包含这个Python对象的所有信息的某个内存位置,由于Python对象的整个数据类型结构体里面还包含大量额外的信息,相对C语言来说这些信息会增加额外的负担。

Numpy的数组与Python列表差异:

  • Python列表每一个元素都是完整的结构体,包含数据和类型信息;比较灵活,可用任意类型填充。
  • Numpy数组是固定类型的,要求数组内必须包含同一类型的数据,如果类型不匹配,Numpy将会向上转换(如果可行),如整型可以转换成浮点型;缺乏灵活性,但是可更有效存储和操作数据。

Numpy基本数据类型表

名称 描述
bool_ 布尔型数据类型(True 或者 False)
int_ 默认的整数类型(类似于 C 语言中的 long,一般是int 32 或 int64)
intc 与 C 的 int 类型一样,一般是 int32 或 int 64
intp 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8 字节(-128 to 127)
int16 整数(-32768 to 32767)
int32 整数(-2147483648 to 2147483647)
int64 整数(-9223372036854775808 to 9223372036854775807)
uint8 无符号整数(0 to 255)
uint16 无符号整数(0 to 65535)
uint32 无符号整数(0 to 4294967295)
uint64 无符号整数(0 to 18446744073709551615)
float_ float64 类型的简写
float16 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_ complex128 类型的简写,即 128 位复数
complex64 复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128 复数,表示双 64 位浮点数(实数部分和虚数部分)
#获取数组数据类型
In [11]: arr = np.array([1,2,3,4])
In [12]: arr.dtype
Out[12]: dtype('int32')

#转换数组数据类型
In [13]: float_arr = arr.astype(np.float64)
In [14]: float_arr.dtype
Out[14]: dtype('float64')

#转换数组与另一个数组一样的数据类型
In [15]: arr2 = np.array([2.22,3.33,-1.2])
In [17]: float_arr2 = arr.astype(arr2.dtype)
In [18]: float_arr2
Out[18]: array([1., 2., 3., 4.])
In [19]: float_arr2.dtype
Out[19]: dtype('float64')

#创建结构化数据类型
In [2]: a = np.array([1,2,3],dtype = complex)
In [3]: a
Out[3]: array([1.+0.j, 2.+0.j, 3.+0.j])

In [4]: dt = np.dtype([('age',np.int8)])
In [5]: dt
Out[5]: dtype([('age', 'i1')])

In [6]: a = np.array([(10,),(20,),(30,)],dtype = dt)
In [7]: a
Out[7]: array([(10,), (20,), (30,)], dtype=[('age', 'i1')])

In [8]: a['age']
Out[8]: array([10, 20, 30], dtype=int8)
posted @ 2021-12-15 12:42  溪奇的数据  阅读(197)  评论(0编辑  收藏  举报