将ndarray从float64转换为整数
我在Python中有一个叫做ndarray
的数组,它的数据类型是float64
,也就是浮点数。我想把这个数组转换成整数数组。该怎么做呢?
用int()
这个方法不行,因为它说无法转换成标量(单一值)。直接改变dtype
这个字段也不行,因为实际的字节内容没有改变。我在谷歌和文档里找了半天也没找到解决办法——那么,最好的方法是什么呢?
4 个回答
6
这里还有一个非常有用的讨论,关于如何在原地转换数组,具体可以参考这个链接:NumPy数组的原地类型转换。如果你担心复制你的数组(这正是astype()
所做的),一定要去看看这个链接。
13
虽然使用 astype
可能是“最佳”选择,但还有几种其他方法可以将数据转换为整数数组。接下来我会用这个 arr
来做示例:
>>> import numpy as np
>>> arr = np.array([1,2,3,4], dtype=float)
>>> arr
array([ 1., 2., 3., 4.])
NumPy 的 int*
函数
>>> np.int64(arr)
array([1, 2, 3, 4])
>>> np.int_(arr)
array([1, 2, 3, 4])
NumPy 的 *array
函数:
>>> np.array(arr, dtype=int)
array([1, 2, 3, 4])
>>> np.asarray(arr, dtype=int)
array([1, 2, 3, 4])
>>> np.asanyarray(arr, dtype=int)
array([1, 2, 3, 4])
之前提到的 astype
方法(为了完整性再提一下):
>>> arr.astype(int)
array([1, 2, 3, 4])
需要注意的是,当你把 int
作为数据类型传给 astype
或 array
时,默认会使用一个依赖于你平台的整数类型。例如,在 Windows 上,它会是 int32
,而在 64 位的 Linux 系统上,如果你用的是 64 位的 Python,它会是 int64
。如果你需要特定的整数类型,并且想避免平台带来的“模糊性”,你应该使用相应的 NumPy 类型,比如 np.int32
或 np.int64
。
92
使用 .astype
方法。
>>> a = numpy.array([1, 2, 3, 4], dtype=numpy.float64)
>>> a
array([ 1., 2., 3., 4.])
>>> a.astype(numpy.int64)
array([1, 2, 3, 4])
可以查看 文档,了解更多选项。