Numpy 数组被舍入?小浮点数的减法

Numpy array being rounded? subtraction of small floats

我正在分配一个 numpy 数组的元素等于减去 "small" 值,python 浮点型数字。当我这样做并尝试通过打印到命令行来验证结果时,数组被报告为全零。这是我的代码:

import numpy as np
np.set_printoptions(precision=20)

pc1x = float(-0.438765)
pc2x = float(-0.394747)

v1 = np.array([0,0,0]) 

v1[0] = pc1x-pc2x

print pc1x
print pc2x
print v1

输出如下所示:

-0.438765
-0.394747
[0 0 0]

我预计 v1 会这样:

[-0.044018 0 0]

我是 numpy 新手,我承认,这可能是对 numpy 和 float 工作原理的明显误解。我认为更改 numpy 打印选项会解决问题,但运气不好。任何帮助都很棒!谢谢!

您正在使用 v1 = np.array([0,0,0]) 声明数组,numpy 假设您需要一个 int 数组。对它的任何后续操作都将保持此 int 数组状态,因此在明智地添加您的小数字元素后,它会转换回 int(导致全为零)。用

声明
v1 = np.array([0,0,0],dtype=float)

dtype docs page.

中详细介绍了 numpy 的大量 numpy specific/platform 特定数据类型

您正在创建具有整数数据类型的数组(因为您没有指定它,NumPy 使用您提供的初始数据的类型)。让它成为一个浮点数:

>>> v1 = np.array([0,0,0], dtype=np.float)
>>> v1[0] = pc1x-pc2x
>>> print v1
[-0.04401800000000000157  0.                      0.                    ]

或者改变传入的数据类型:

>>> v1 = np.array([0.0, 0.0, 0.0])
>>> v1[0] = pc1x-pc2x
>>> print v1
[-0.04401800000000000157  0.                      0.                    ]