NumPy1.2: numpy中的数据类型
原创
©著作权归作者所有:来自51CTO博客作者luteresa的原创作品,请联系作者获取转载授权,否则将追究法律责任
>>> import numpy as np
>>> print(type(np.arange(6)))
<class 'numpy.ndarray'>
>>>
1.NumPy中的ndarray是一个多维数组对象
该对象分两部分:
实际的数据;
描述这些数据的元数据;
实际上大部分数组操作,仅仅修改元数据部分,而不改变底层的实际数据。
NumPy中数组元素类型都是一样的,这样所需存储空间就很容易确定。
>>> import numpy as np
>>> a=np.arange(6)
>>> a
array([0, 1, 2, 3, 4, 5])
>>> b=np.arange(6,dtype=np.float64) #dtype可以指定创建数据类型
>>> b
array([ 0., 1., 2., 3., 4., 5.])
>>> a.dtype.itemsize #单个数组元素占内存字节数
8
>>> b.dtype.itemsize
8
>>> c=np.arange(6,dtype=np.int8)
>>> c
array([0, 1, 2, 3, 4, 5], dtype=int8)
>>> c.dtype.itemsize
1
>>> c.dtype
dtype('int8')
>>> c.ndim
1
>>> c.shape #shape属性返回一个元组
(6,)
>>>
数组的shape属性返回一个元组(tuple),元组中的元素即为NumPy数组每个维度的大小。
Python支持的数据类型有整形、浮点型以及复数型,但这些类型不足以满足科学计算的需求,因此NumPy添加了很多其他的数据类型:
类型 | 描述 |
bool | 用一位存储的布尔类型(值为TRUE或FALSE) |
inti | 由所在平台决定其精度的整数(一般为int32或int64) |
int8 | 整数,范围为-128至127 |
int16 | 整数,范围为-32768至32767 |
int32 | 整数,范围为-231至231-1 |
int64 | 整数,范围为-263至263-1 |
uint8 | 无符号整数,范围为0至255 |
uint16 | 无符号整数,范围为0至65 535 |
uint32 | 无符号整数,范围为0至232-1 |
uint64 | 无符号整数,范围为0至264-1 |
float16 | 半精度浮点数(16位):其中用1位表示正负号,5位表示指数,10位表示尾数 |
float32 | 单精度浮点数(32位):其中用1位表示正负号,8位表示指数,23位表示尾数 |
float64或float | 双精度浮点数(64位):其中用1位表示正负号,11位表示指数,52位表示尾数 |
complex64 | 复数,分别用两个32位浮点数表示实部和虚部 |
complex12或complex | 复数,分别用两个64位浮点数表示实部和虚部 |
NumPy可以使用字符编码来表述数据类型,这是为了兼容NumPy的前身Numeric,不建议使用;
数据类型 | 字符编码 |
整数 | i |
无符号整数 | u |
单精度浮点数 | f |
双精度浮点数 | d |
布尔值 | b |
复数 | D |
字符串 | S |
Unicode字符串 | U |
void (空) | V |
2.dtype类的属性
1) dtype类有很多属性,
>>> t=np.dtype('float64')
>>> t.type
<class 'numpy.float64'>
>>> t.char #获取数据类型的字符编码
'd'
'''
str属性表示数据类型的字符串表示,
1.'<':首字符表示字节序'>'表大端,'<'=>小端;
2.'f':字符编码;
3.'8':每个数组元素存储所需字节数;
'''
>>> t.str
'<f8'
2)创建自定义数据类型:
创建一个数组,数组每个元素类型为:用一个长度为40字符的字符串来表示商品名,用一个32位整数记录商品数量,用一个32位浮点数记录商品价格
>>> from numpy import *
>>> t = np.dtype([('name',np.str_,40),('numitems',int32),('price',float32)])
>>> t
dtype([('name', '<U40'), ('numitems', '<i4'), ('price', '<f4')])
>>> t['name']
dtype('<U40')
>>> itemz = array([('Meaning of life DVD',42,3.1415),('Butter',13,2.72)],dtype=t)
>>> itemz[1]
('Butter', 13, 2.72000003)
>>>