天天看点

一个证明了matlab比numpy精度更高的例子

这个例子是我偶然得到的。

首先是numpy:

X=np.array([[1000,1],[2000,1.5],[3000,8]])
y=np.array([2,3.5,11.5]).reshape(3,1)
X=np.hstack((X,np.ones(X.shape[0]).reshape(X.shape[0],1)))
X,y,np.round(np.dot(np.round(np.linalg.inv(np.round(np.dot(X.T,X),20)),20),np.round(np.dot(X.T,y),20)),20)
           
(array([[1.0e+03, 1.0e+00, 1.0e+00],
        [2.0e+03, 1.5e+00, 1.0e+00],
        [3.0e+03, 8.0e+00, 1.0e+00]]),
 array([[ 2. ],
        [ 3.5],
        [11.5]]),
 array([[ 9.58333333e-04],
        [ 1.08333333e+00],
        [-4.16666667e-02]]))
           

其次是matlab

>> X=[1000,1,1
2000,1.5,3.5
3000,8.5,11.5]

X =

   1.0e+03 *

    1.0000    0.0010    0.0010
    2.0000    0.0015    0.0035
    3.0000    0.0085    0.0115

>> y=[2
3.5
11.5]

y =

    2.0000
    3.5000
   11.5000

>> inv(X'*X)*X'*y

ans =

    0.0010
    1.0000
   -0.0000
           

这个二元线性回归的例子是我编的,正确输出就是matlab的结果,但是numpy的求解结果是有偏差的。并且这样的偏差在我这么一个学数学的人眼里,就感觉,丑。

有些人说numpy和matlab精度是一样的,那就请在评论里面告诉我以上是什么原因吧。