Почему я не могу использовать оператор деления на месте при делении вектора numpy на numpy норму - PullRequest
0 голосов
/ 05 марта 2020

Этот код выполняется без проблем:

import numpy as np

x = np.array([1, 3])
x = x / np.linalg.norm(x)

Но этот код вылетает:

import numpy as np

x = np.array([1, 3])
x /= np.linalg.norm(x)

С ошибкой:

TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to provided output parameter (typecode 'l') according to the casting rule ''same_kind''

Почему?

1 Ответ

2 голосов
/ 05 марта 2020

В основном, потому что numpy заботится о типах, как предполагает ошибка ("... невозможно принудительно ..." same_kind '").

Вы создаете x как массив целых чисел, но np.linalg.norm(x) возвращает число с плавающей запятой, заставляя x / np.linalg.norm(x) возвращать массив значений с плавающей запятой.

Если вы создадите x как массив чисел с плавающей запятой:

x = np.array([1.0, 3.0])

, тогда это будет работать

import numpy as np

x = np.array([1.0, 3.0])
x /= np.linalg.norm(x)
print(x)
# [0.31622777 0.9486833 ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...