读书笔记二、ndarray的数据类型
dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息:
import numpy as np arr1=np.array([1,2,3],dtype=np.float64) arr2=np.array([1,2,3],dtype=np.int32) arr1.dtype Out[4]: dtype('float64') arr2.dtype Out[5]: dtype('int32')
数值型dtype的命名方式相同:一个类型名(如float或int),后面跟一个用于表示各元素位长的数字。
可以通过ndarray的astype方法显式地转换其dtype:
arr=np.array([1,2,3,4,5]) arr.dtype Out[7]: dtype('int32') float_arr=arr.astype(np.float64) float_arr.dtype Out[9]: dtype('float64')
在本例中整数被转换为浮点数。如果将浮点数转换为整数,小数部分会被截断:
arr=np.array([3.7,-1.2,-2.6,0.5,12.9,10.1]) arr Out[11]: array([ 3.7, -1.2, -2.6, 0.5, 12.9, 10.1]) arr.astype(np.int32) Out[12]: array([ 3, -1, -2, 0, 12, 10])
如果字符串数组表示的全是数字,也可以用astype将其转换为数值形式:
numeric_strings=np.array(['1.25','-9.6','42'],dtype=np.string_) numeric_strings.astype(float) Out[14]: array([ 1.25, -9.6 , 42. ])
转换过程失败,会引发一个TypeError。可以看到,写的是float而不是np.float64,numpy会将Python类型映射到等价的dtype上。
数组的dtype 的另外一个用法:
int_array=np.arange(10) calibers=np.array([.22,.270,.357,.380,.44,.50],dtype=np.float64) int_array.astype(calibers.dtype) Out[17]: array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
也可以用简洁的类型代码来表示dtype:
empty_uint32=np.empty(8,dtype='u4') empty_uint32 Out[21]: array([ 43712628, 0, 68801840, 0, 1, 537528933, 112050304, 0], dtype=uint32)