Added vector calc functions
							parent
							
								
									2dca458c16
								
							
						
					
					
						commit
						d2ace996da
					
				@ -0,0 +1,78 @@
 | 
			
		||||
"""
 | 
			
		||||
Lists as Vectors is actually not that performant. Numpy gives all of these features straight out of the box.
 | 
			
		||||
"""
 | 
			
		||||
import math
 | 
			
		||||
from typing import List
 | 
			
		||||
from functools import reduce
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def vector_add(v: List[float], w: List[float]) -> List[float]:
 | 
			
		||||
    """Adds corresponding elements of two Vectors."""
 | 
			
		||||
    return [v_i + w_i
 | 
			
		||||
            for v_i, w_i in zip(v, w)]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def vector_subtract(v: List[float], w: List[float]) -> List[float]:
 | 
			
		||||
    """Subtracts corresponding elements of two Vectors."""
 | 
			
		||||
    return [v_i - w_i
 | 
			
		||||
            for v_i, w_i in zip(v, w)]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def vector_sum(vectors: List[List[float]]) -> List[float]:
 | 
			
		||||
    """Sums all corresponding elements."""
 | 
			
		||||
    # result = vectors[0]
 | 
			
		||||
    # for vector in vectors[1:0]:
 | 
			
		||||
    #     result = vector_add(result, vector)
 | 
			
		||||
    # return result
 | 
			
		||||
    return reduce(vector_add, vectors)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def scalar_multiple(c: float, v: List[float]) -> List[float]:
 | 
			
		||||
    """Scales a vector by a multiplier."""
 | 
			
		||||
    return [c * vi for vi in v]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def vector_mean(vectors) -> List[float]:
 | 
			
		||||
    """Compute the vector whose ith element is the mean of the ith element
 | 
			
		||||
    of the input vectors.
 | 
			
		||||
 | 
			
		||||
    Allows us to calculate the component-wise means of a list of (same-sized)
 | 
			
		||||
    vectors.
 | 
			
		||||
    """
 | 
			
		||||
    n = len(vectors)
 | 
			
		||||
    return scalar_multiple(1 / n, vector_sum(vectors))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def dot_product(v: List[float], w: List[float]) -> float:
 | 
			
		||||
    """The dot product of two vectors is the sum of their component wise
 | 
			
		||||
    products.
 | 
			
		||||
 | 
			
		||||
    The dot product measures how far vector v extends in the w direction.
 | 
			
		||||
    """
 | 
			
		||||
    return sum(v_i * w_i for v_i, w_i in zip(v, w))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def sum_of_squares(v: List[float]) -> float:
 | 
			
		||||
    return dot_product(v, v)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def magnitude(v: List[float]) -> float:
 | 
			
		||||
    """Calculates the magnitude (length) of a vector.
 | 
			
		||||
 | 
			
		||||
    The pythagorean theorem a**2 + b**2 = c**2 actually is an example
 | 
			
		||||
    of calculating the magnitude of a vector of length 2.
 | 
			
		||||
    """
 | 
			
		||||
    return math.sqrt(sum_of_squares(v))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# def squared_distance(v: List[float], w: List[float]) -> float:
 | 
			
		||||
#     """Calculates t
 | 
			
		||||
#
 | 
			
		||||
#     """
 | 
			
		||||
#     return sum_of_squares(vector_subtract(v, w))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def vector_distance(v: List[float], w: List[float]) -> float:
 | 
			
		||||
    """Calculates the distance between vectors."""
 | 
			
		||||
    # return math.sqrt(squared_distance(v, w))
 | 
			
		||||
    return magnitude(vector_subtract(v, w))
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue