Точечный продукт в модуле векторов - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь использовать модуль Python Vectors.

v1 =  Vector(1,0,0)
v2 =  Vector(1,1,0)

угол между этими векторами составляет 45 градусов. Я могу получить правильное значение, используя приведенную ниже инструкцию.

>>> v1.angle(v2)
45.00000000000001

Однако выдается ошибка для v2.angle (v1).

В ходе расследования выяснилось, что v1.dot (v2) и v2.dot (v1) дают разные результаты, что является причиной этой ошибки.

>>> v1.dot(v2)
1
>>> v2.dot(v1)
2

В отличие от вышеизложенного, я понимаю, что скалярное произведение коммутативно.

Любая помощь в этом была бы великолепна.

1 Ответ

0 голосов
/ 16 апреля 2019

Как прокомментировал pypi.org/project/vectors, это ужасно устаревший модуль. Это не стандартный или рекомендуемый модуль. Пожалуйста, используйте вместо этого numpy или scipy.

import numpy as np
v1  = np.array([1,0,0])
v2  = np.array([1,1,0])

Вы можете найти скалярное произведение одним из следующих способов:

print(v2.dot(v1))              # Output = 1
print(v2.dot(v1))              # Output = 1
print(np.dot(v1,v2))           # Output = 1

Чтобы найти угол:

cos = np.dot(v1,v2)/(norm(v1)*norm(v2))
angle = np.arccos(np.clip(cos, -1, 1))

Вы также можете посмотреть на sympy, если вы предпочитаете работать символически. https://docs.sympy.org/latest/modules/geometry/lines.html#sympy.geometry.line.LinearEntity.angle_between

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