dtype(数据类型)是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息:
arr1 = np.array([1, 2, 3,],dtype = np.float64)arr2 = np.array([1, 2, 3,],dtype = np.float32)
arr1.dtype
out:
dtype('float64')
arr2.dtype
out:
dtype('float32')
你可以通过ndarray的astype方法明确地将一个数组从一个dtype转换成另一个dtype:
arr = np.array([1, 2, 3, 4, 5, 6, 7])arr.dtype
out:
dtype('float32')
float_arr = arr.astype(np.float64)float_arr.dtype
out:
dtype('float64')
在本例中,整数被转换成了浮点数。如果将浮点数转换成整数,则小数部分将会被截取删除:
arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])arr
out:
array([ 3.7, -1.2, -2.6, 0.5, 12.9, 10.1])
arr.astype(np.int32)
out:
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:
array([ 1.25, -9.6 , 42. ])
注意:使用numpy.string_类型时,一定要小心,因为NumPy的字符串数据是大小固定的,发生截取时,不会发出警告。pandas提供了更多非数值数据的便利的处理方法。
如果转换过程因为某种原因而失败了(比如某个不能被转换为float64的字符串),就会引发一个ValueError。这里,我比较懒,写的是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:
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
你还可以用简洁的类型代码来表示dtype:
empty_uint32 = np.empty(8, dtype='u4')empty_uint32
out:
array([1, 2, 3, 4, 5, 6, 7, 8], dtype=uint32)
调用astype总会创建一个新的数组(一个数据的备份),即使新的dtype与旧的dtype相同。
下期我们将分享Numpy数组的运算,如果喜欢请点赞收藏,您的支持是我最大的动力,谢谢大家,共同进步。