将ndarray从float64转换为整数

69 投票
4 回答
209300 浏览
提问于 2025-04-17 10:11

我在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 作为数据类型传给 astypearray 时,默认会使用一个依赖于你平台的整数类型。例如,在 Windows 上,它会是 int32,而在 64 位的 Linux 系统上,如果你用的是 64 位的 Python,它会是 int64。如果你需要特定的整数类型,并且想避免平台带来的“模糊性”,你应该使用相应的 NumPy 类型,比如 np.int32np.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])

可以查看 文档,了解更多选项。

撰写回答