Python 在向 numpy 数组添加过程中从 long 进行转换

标签 python numpy types casting

为什么 Python 在做某事时不将长数字转换为 numpy float 。喜欢

a = np.array([10.0, 56.0]) + long(10**47)

变量a的数据类型是object。我没想到在最大似然优化问题中,一个拟合参数 B 是一个整数,因此 10**B 变成了一个 long。

这是由于担心精度损失吗?

最佳答案

我怀疑这是因为 python 能够存储任意长的整数,因此 numpy 意识到它无法安全地将结果转换为已知的数据类型。因此,它退回到将数组视为 python 对象数组,并使用 python 规则按元素相乘(转换为 float )。

您可以使用 np.result_type 查看结果类型是什么:

>>> np.result_type(np.array([10.0, 56.0],long(10**47))
dtype('O')

根据 np.result_type 的文档,发生的情况是:

首先,在每个输入上调用np.min_scalar_type():

>>> np.min_scalar_type(np.array([10.0, 56.0]))
dtype('float64')
>>> np.min_scalar_type(long(10**47))
dtype('O')

其次,通过使用 np.promote_types 组合这些类型来确定结果:

>>> np.promote_types(np.float64,np.dtype('O'))
dtype('O')

关于Python 在向 numpy 数组添加过程中从 long 进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53636822/

相关文章:

python - 手动设置图例中点的颜色

go - 接受任何 slice 的 Express 函数

python - 如何比较 python 中的变量类型?

python - Django - 使用 Gunicorn、Nginx 和 Supervisor 进行部署,Gunicorn 错误日志

python - Python 3 中函数前面的 '@' 是什么意思?

python - 将 numpy 整数数组转换为 12 位二进制

JavaScript:检查对象字段是否未定义而不检查对象是否未定义

python - 快速读取变量的非连续子集

python - 使用 tf.where() 通过 2d 条件选择 3d 张量并用键和值替换 2d 索引中的元素

python - 如何将numpy数组转换为Matlab矩阵?