为什么 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/