Углы между двумя n-мерными векторами в Python

Я должен определить угол (углы) между двумя n-мерными векторами в Python. Например, вход может быть двумя списками как следующее: [1,2,3,4] и [6,7,8,9].

64
задан Gabriel 27 January 2016 в 02:45
поделиться

2 ответа

import math

def dotproduct(v1, v2):
  return sum((a*b) for a, b in zip(v1, v2))

def length(v):
  return math.sqrt(dotproduct(v, v))

def angle(v1, v2):
  return math.acos(dotproduct(v1, v2) / (length(v1) * length(v2)))

Примечание : это не удастся, если векторы имеют одинаковое или противоположное направление. Правильная реализация находится здесь: https://stackoverflow.com/a/13849249/71522

55
ответ дан 24 November 2019 в 15:36
поделиться

Используя numpy (настоятельно рекомендуется), вы бы сделали:

from numpy import (array, dot, arccos, clip)
from numpy.linalg import norm

u = array([1.,2,3,4])
v = ...
c = dot(u,v)/norm(u)/norm(v) # -> cosine of the angle
angle = arccos(clip(c, -1, 1)) # if you really want the angle
37
ответ дан 24 November 2019 в 15:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: