Элемент массива NumPy странно меняется при выборе - PullRequest
0 голосов
/ 30 марта 2019

Я сделал простой решатель системы линейных уравнений, используя массивы NumPy. У меня под рукой два массива: один 2x2 (A) и один 2x1 (B).

Обращая первое с помощью Ainv = np.linalg.inv(A) и затем умножая его на второе с помощью Ainv.dot(B), я получаю третий массив 2x1 с моими желаемыми значениями x и y, который возвращается функцией, называемой solveLin() кстати.

Теперь, если я распечатаю print(solveLin()) с переменными на месте, я получу массив [[-8.] [ 5.]] с правильными значениями.

Однако, если я выберу значения, например, print(solveLin()[0][0]), я получу -7.999999999999998 и 4.999999999999999 в качестве ответов.

Если я выставлю их как целые числа, они станут -7 и 4

Редактировать: Я понимаю, почему плавающие числа действуют таким образом, но я не понимаю, почему они отображаются одним способом в массиве, а затем другим способом при прямом вызове.

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Это связано, в основном, с тем фактом, что двоичный код, который numpy использует для сокращения чисел, трудно точно представить в десятичном виде и наоборот.Посмотрите, как мы привыкли представлять одну треть в десятичном виде, 0,33333333 .. В Python 0,1 - это 0,100000000000000005551115123125 .. Вот ссылка на документацию Python по этому вопросу: Арифметика с десятичной запятой и с плавающей запятой

0 голосов
/ 30 марта 2019

Numpy пытается быть полезным и печатать вещи для чтения. См. this для подробного объяснения того, что он делает.

Печать в вызовах python str и str не предназначена для печати точных вещей, только для информации. repr () для точных представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...