python - 号码溢出如何处理?

标签 python numpy curve-fitting integer-overflow

我正在使用 numpy 计算趋势线斜率:

xs = []
ys = []
my_x = 0
for i in range(2000):
    my_x += 1
    ys.append(5*my_x+random.rand())
    xs.append(my_x)

A = matrix(xs).T;
b = matrix(ys).T;
N = A.T*A
U = A.T*b
print N,U
a = (N.I*U)[0,0]    
print a

我得到的结果是 a=-8.2053307679 而不是预期的 5。发生这种情况可能是因为变量N中的数字太大。

如何克服这个问题?任何帮助将不胜感激。

最佳答案

当我运行代码时,答案正如您所期望的:

[[2668667000]] [[  1.33443472e+10]]
5.00037927592

这可能是因为你使用的是32位系统,而我使用的是64位系统。相反,您可以使用

A = matrix(xs, dtype='float64').T;
b = matrix(ys, dtype='float64').T;

仅供引用,在使用 numpy 时,如果您致力于对算法进行向量化,您的效率会更高。例如,您可以将前几行替换为:

xs = np.arange(2000)
ys = 5 * xs + np.random.rand(2000)
<小时/>

编辑——还有一件事:从数值上来说,在进行这样的计算时显式反转矩阵是一个坏主意。最好在算法中使用 a = np.linalg.solve(N, U)[0, 0] 之类的东西。在这里它不会产生很大的影响,但如果你转向更复杂的问题,它肯定会产生很大的影响!有关此问题的一些讨论,请查看 this article .

关于python - 号码溢出如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33330498/

相关文章:

python - 在正数前附加一个加号

python - 如何在不卸载的情况下解决导入cv2上的ImportError

python - 与 GPU 上的 torch.FloatTensor 进行比较的优雅方式

python - 如何将不规则间隔的 x 和 y 坐标张量平均到具有特定单元大小的网格中?

python - 使用 scipy 的低阶近似

python - scipy.optimize.curvefit 中除以零误差

python - 每组缺失值的 Pandas 插补

python - OSError : MoviePy error: the file guitar. mp4 找不到

python - 使用三次样条进行曲线拟合

python - 在 3d 空间中对 1d 曲线进行良好的插值/拟合——Python