大型组件的矢量幅度

时间:2015-07-06 12:45:28

标签: python numpy rounding

我注意到numpy有一个内置函数linalg.norm(vector),它产生了大小。对于较小的值,我得到所需的输出

>>> import numpy as np
>>> np.linalg.norm([0,2])
2.0

但是对于较大的值:

>>> np.linalg.norm([0,149600000000])
2063840737.6330884

这是一个巨大的错误,我可以做些什么。制作我自己的函数似乎产生了同样的错误。这里有什么问题,这是一个很大的舍入错误?,我该怎么做呢?

1 个答案:

答案 0 :(得分:4)

您的号码是以整数形式写的,但它太大而无法放入numpy.int32。即使在python3中,这个问题似乎也会发生 原生数字很大。

在数值工作中,我尝试使所有浮点数除非它是一个索引。所以我试过了:

In [3]: np.linalg.norm([0.0,149600000000.0])
Out[3]: 149600000000.0

详细说明:在这种情况下,添加.0是将整数转换为双精度的简单方法。在更现实的代码中,您可能有不确定类型的传入数据。最安全(但不总是正确)的做法是强制执行函数顶部的浮点数组。

def do_something_with_array(arr):
    arr = np.double(arr)   # or np.float32 if you prefer.
    ... do something ...