python - 大部件的矢量幅度

标签 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.int32。这个问题似乎甚至在 python3 中也会发生,其中 本地人的数量很大。

在数值工作中,我尝试将所有内容设为浮点,除非它是索引。所以我尝试了:

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

详细说明:在本例中,添加 .0 是将整数转换为 double 的简单方法。在更实际的代码中,您可能会收到类型不确定的传入数据。最安全(但并不总是正确)的做法就是在函数顶部强制转换为 float 组。

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

关于python - 大部件的矢量幅度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31246238/

相关文章:

php 汇总/ceil 合并 mysql AVG()

c++ - 行编辑setText函数Qt

python - Conda环境不会在git中存储gitlab密码(Mac)

python - Trac 使用数据库身份验证

python - 网络 Python 问题

python - (稀疏)2D numpy 数组每行/列的快速非零索引

python - Numpy "orthogonal"广播

python - 如何使正则表达式匹配整个字符串?

python - 将数组或 DataFrame 与其他信息一起保存在文件中

qt - 如何制作圆形 QLabel?