Python 大分量矢量幅值

Python 大分量矢量幅值,python,numpy,rounding,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 这是一个巨大的错误,我能做什么来代替呢。创建自己的函数似乎也会产生同样的错误。这里

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

>>> import numpy as np
>>> np.linalg.norm([0,2])
2.0
但是,对于较大的值:

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

这是一个巨大的错误,我能做什么来代替呢。创建自己的函数似乎也会产生同样的错误。这里的问题是什么,舍入误差有这么大吗?我能做些什么呢?

您的数字被写成一个整数,但它太大,无法放入
numpy.int32
中。这个问题似乎甚至在python3中也会发生,而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 ...