Numpy数组被舍入?减去小花车

时间:2015-07-30 19:46:15

标签: python arrays numpy rounding pretty-print

我将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打印选项会修复,但没有运气。任何帮助都很棒!谢谢!

2 个答案:

答案 0 :(得分:4)

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

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

dtype docs page.

中详细介绍了针对numpy的大量numpy特定/平台特定数据类型

答案 1 :(得分:1)

您正在使用整数数据类型创建数组(因为您没有指定它,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.                    ]