我有一些整数存储在np.float64个数组和标量中,我想将它们转换为本机Pythonint.

这是我的try :

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'>

这里有三件事我不明白:

  1. 为什么标量和数组的类型转换不同?
  2. 为什么np.floor()要进行类型转换(对于数组输入)?
  3. 如何可靠地对标量和数组进行np.float64int的强制转换?

推荐答案

我相信由于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相关问答推荐

如何确保Flask应用程序管理面板中的项目具有单击删除功能?

Pandas滚动分钟,来自其他列的相应值

合并同名列,但一列为空,另一列包含值

使用Beautiful Soup获取第二个srcset属性

NumPy中的右矩阵划分,还有比NP.linalg.inv()更好的方法吗?

如何使用SubProcess/Shell从Python脚本中调用具有几个带有html标签的参数的Perl脚本?

配置Sweetviz以分析对象类型列,而无需转换

Polars比较了两个预设-有没有方法在第一次不匹配时立即失败

使用FASTCGI在IIS上运行Django频道

为什么这个带有List输入的简单numba函数这么慢

如何在虚拟Python环境中运行Python程序?

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

数据抓取失败:寻求帮助

用NumPy优化a[i] = a[i-1]*b[i] + c[i]的迭代计算

django禁止直接分配到多对多集合的前端.使用user.set()

在pandas中使用group_by,但有条件

计算天数

Python Pandas获取层次路径直到顶层管理

在Python中使用if else或使用regex将二进制数据如111转换为001""

替换现有列名中的字符,而不创建新列