pythonvectorangle

Angles between two n-dimensional vectors in Python


I need to determine the angle(s) between two n-dimensional vectors in Python. For example, the input can be two lists like the following: [1,2,3,4] and [6,7,8,9].


Solution

  • 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)))
    

    Note: this will fail when the vectors have either the same or the opposite direction. The correct implementation is here: https://stackoverflow.com/a/13849249/71522