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)
中详细介绍了 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. ]
我正在分配一个 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)
中详细介绍了 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. ]