Python Numpy返回0.00…002

Python Numpy返回0.00…002,python,numpy,Python,Numpy,抱歉,如果这篇文章是杜普利,我找不到答案。。。我有以下代码: import numpy as np V = np.array([[6, 10, 0], [2, 5, 0], [0, 0, 0]]) subarr = np.array([[arr[0][0], arr[0][1]], [arr[1][0], arr[1][1]]]) det = np.linalg.det(subarr) cross = np.cross(arr[0],

抱歉,如果这篇文章是杜普利,我找不到答案。。。我有以下代码:

import numpy as np

V = np.array([[6, 10, 0],
              [2, 5, 0],
              [0, 0, 0]])

subarr = np.array([[arr[0][0], arr[0][1]], [arr[1][0], arr[1][1]]])
det = np.linalg.det(subarr)
cross = np.cross(arr[0], arr[1])

print(f"Det: {det}")
print(f"Cross: {cross}")
我希望
det
返回10.0,
交叉
在本例中返回
[0,0,10]
,最后一个数字等于
det
。出于某种原因,python返回

Det: 10.000000000000002
Cross: [ 0  0 10]
有人能解释一下原因吗?

你看到的是

如果你想知道在寻找由整数组成的矩阵的行列式时,如何得到浮点值(通常的计算方法是
6*5-2*10=10
),
np.linalg.det
用于寻找行列式。这对于2x2矩阵不是很有效,但是当你有更大的矩阵时效率更高

对于2x2,您可以获得:

scipy.linalg.lu(A, 1)
Out: 
(array([[  1.        ,  0.        ],
        [  0.33333333,  1.        ]]), 
 array([[  6.        ,  10.        ],
        [  0.        ,   1.66666667]]))
行列式只是对角线的乘积,最终为
6.*1.66666 7
,由于浮点错误,解析为
10.00000002

您看到的是

如果你想知道在寻找由整数组成的矩阵的行列式时,如何得到浮点值(通常的计算方法是
6*5-2*10=10
),
np.linalg.det
用于寻找行列式。这对于2x2矩阵不是很有效,但是当你有更大的矩阵时效率更高

对于2x2,您可以获得:

scipy.linalg.lu(A, 1)
Out: 
(array([[  1.        ,  0.        ],
        [  0.33333333,  1.        ]]), 
 array([[  6.        ,  10.        ],
        [  0.        ,   1.66666667]]))

行列式只是对角线的乘积,最终为
6.*1.66666 7
,由于浮点错误,解析为
10.00000002

查找浮点精度关键字:查找浮点精度关键字: