我在 np.float64
数组和标量中存储了一些整数,我想将其转换为原生 Python int
。
这是我的尝试:
import numpy as np
a = np.array([1, 2, 3], dtype=np.float64)
b = np.float64(4)
def float_to_int(x):
x_object = x.astype(object)
return np.floor(x_object)
# Array inputs are converted to int
print(type(float_to_int(a)[0]))
# >> <class 'int'>
# Scalar inputs are left as np.float64
print(type(float_to_int(b)))
# >> <class 'numpy.float64'>
这里有 3 件事我不明白:
- 为什么标量和数组的类型转换不同?
- 为什么
np.floor()
要进行类型转换(对于数组输入)? - 如何可靠地将标量和数组的
np.float64
转换为int
?
最佳答案
我相信,由于 Numpy 和 python 数据类型相关但本质上不同,因此您必须将其显式转换为 python 数据类型。
一种方法是:
a = a.astype(np.int64).tolist()
b = int(b)
或者
a = a.astype(np.int64).astype(object)
b = b.astype(np.int64).astype(object)
当您将 numpy 数组转换为 object 时数据类型,它在内部将其存储为 python 对象。对象数据类型很灵活,并且可以在转换过程中进行推断。
关于python - 为什么 NumPy 对数组和标量返回不同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76693541/