python - 在 Python 中减去 numpy 数组时不需要的舍入

标签 python arrays numpy rounding subtraction

当从单个 float 中减去数组时,我遇到了 python 自动舍入非常小的数字(小于 1e-8)的问题。举个例子:

 import numpy as np
 float(1) - np.array([1e-10, 1e-5])

关于如何强制 python 不舍入的任何想法?这迫使我在某些情况下除以零,并成为一个问题。从 numpy 数组中减去时会出现同样的问题。

最佳答案

大多数情况下,只是 numpy 数组的 repr 欺骗了你。

考虑上面的例子:

import numpy as np  
x = float(1) - np.array([1e-10, 1e-5]) 
print x
print x[0]
print x[0] == 1.0

这会产生:

[ 1.      0.99999 ]
0.99999999999
False

所以第一个元素实际上不是零,它只是 numpy 数组的 pretty-print 以这种方式显示它。

这可以通过 numpy.set_printoptions. 控制

当然,numpy 从根本上说是使用有限精度的 float 。 numpy 的全部意义在于成为类似数据数组的内存高效容器,因此 numpy 中没有与 decimal 类等效的类。

但是,64 位 float 具有相当大的精度范围。使用 1e-10 和 1e-5 不会遇到太多问题。如果需要,还有一个 numpy.float128 dtype,但操作会比使用 native float 慢得多。

关于python - 在 Python 中减去 numpy 数组时不需要的舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6867348/

相关文章:

python - 如何替换 xarray 变量中的值?

python - 如何使用 Flask RestPlus 验证 POST 负载中的日期类型?

java - 如何使用 toString 打印对象的特定实例

Python将3d数组 reshape 为2d

python - 从 numpy 数组中提取数组

python - 如何将 numpy 数组转换为图像数据集?

Python 3打印到文件创建错误的新行

python - 如何删除每行全零的列,然后按总和对所选列进行排序

c - 使用 malloc 时指向空指针?

c - 免费二维字符数组