Numpy返回.00 ... 002

问题描述 投票:0回答:1

很抱歉,如果这篇文章是dupli,我找不到答案...我有以下代码:

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并且cross在这种情况下返回[0, 0, 10],最后一个数字等于det。出于某种原因,python返回

Det: 10.000000000000002
Cross: [ 0  0 10]

有人可以解释一下原因吗?

python numpy
1个回答
2
投票

你所看到的是floating point inaccuracies.

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

对于你的2x2,你得到:

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

行列式只是此对角线的乘积,最终成为6. * 1.66666667,由于浮点误差而解析为10.00000002

© www.soinside.com 2019 - 2024. All rights reserved.