Numpy基础之 ndarray的数据类型

dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息。

这也是Numpy如此强大和灵活的原因之一。多数情况下,它们直接映射到相应的机器表示,这使得‘读写磁盘上的二进制数据流’以及‘集成低级语言代码(如C、Fortran)’等工作变得更加简单。下表列出了Numpy所支持的全部数据类型。

类型 类型代码 说明
int8、uint8 i1、u1 有符号和无符号的8位(1个字节)整型
int16、uint16 i2、u2 有符号和无符号的16位(2个字节)整
int32、uint32 i4、u4 有符号和无符号的32位(4个字节)整
int64、unint64 i8、u8 有符号和无符号的64位(8个字节)整
float16   f2 半精度浮点数
float32 f4或f

标准的单精度浮点数。与C的float兼容

float64 f8或d 标准的双精度浮点数。与C的double和Python的float对象兼容
float128 f16或g 扩展精度浮点数
complex64、complex128、complex256 c8、c16、c32 分别用两个32位、64位或128位浮点数表示的复数
bool   ? 存储True和False值的布尔类型
object O Python对象类型
string_ S 固定长度的字符串长度(每个字符1个字节)。例如,要创建一个长度为10的字符串,应使用S10
unicode_ U 固定长度的unicode长度(字节数由平台决定)。跟字符串的定义方式一样(如U10)

你可以通过ndarray的astype方法显示地转换其dtype:

注意:调用astype无论如何都会创建一个新的数组(原始数据的一份拷贝),即使新dtype和老dtype相同也是如此。

In [62]: arr=np.array([1,2,3],dtype='int64')

In [63]: arr.dtype
Out[63]: dtype('int64')

In [64]: float_arr=arr.astype(np.float64)

In [65]: float_arr.dtype
Out[65]: dtype('float64')

在本例中,整数被转换成了浮点数。如果将浮点数转换成整数,则小数部分将会被截断:

注意:浮点数(比如float64和float32)只能表示近似的分数值。在复杂计算中,由于可能会积累一下浮点错误,因此比较操作只能在一定小数位以内有效。

In [70]: float_arr=np.array([2.6,-6.3],dtype='f4')

In [71]: float_arr.astype('i4')
Out[71]: array([ 2, -6])

如果某字符串数组表示的全是数字,也可以用astype将其转换为数值形式:

注意:如果转换过程因为某种原因失败了(比如某个不能被转换为float64的字符串),就会引发一个TypeError。

In [72]: numeric_strings=np.array(['1.2','-6.2'],dtype=np.string_)

In [73]: numeric_strings.astype(np.float)
Out[73]: array([ 1.2, -6.2])

In [74]: numeric_strings=np.array(['1.2','-6.2','abc'],dtype=np.string_)

In [75]: numeric_strings.astype(np.float)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
C:\Users\Administrator\Desktop\ in ()
----> 1 numeric_strings.astype(np.float)

ValueError: could not convert string to float: abc

数组的dtype还有一种用法:

In [67]: int_array=np.arange(10)

In [68]: float_array=np.array([.22,.1],dtype='f8')

In [69]: int_array.astype(float_array.dtype)
Out[69]: array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])

你可能感兴趣的:(numpy)