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