a = np.array([[1.0, 2.0], [3.0, 4.0]])
ainv = np.linalg.inv(a) #[[-2.0, 1.0],[1.5, -0.5]]
print(np.dot(a,ainv))
Урожай как вы обнаружили:
[[1.0000000e+00 0.0000000e+00]
[8.8817842e-16 1.0000000e+00]]
Давайте посмотрим на тип элементов массива
type(ainv[1][1])
Показывает, что тип массива
numpy.float64
Давайте посмотрим на точность точности для этого типа
numpy.finfo(numpy.float64).precision
Numpy говорит, что приблизительное число десятичных цифр, к которому относится этот тип числа с плавающей точкой, равно 15.
15
Для любопытства мы также можем посмотреть на эпсилон машины для данного типа;
np.finfo(np.float64).eps
Что дает наименьшее число n, где 1 + n неотличимо от 1
2.220446049250313e-16
Таким образом, даже несмотря на то, что полученное вами число технически отличимо от 0 для типа данных, общая точность составляет 15 десятичных знаков, вычисления на больших матрицах могут привести к еще большей неточности с плавающей запятой.