Added vector calc functions

master
androiddrew 6 years ago
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…
Cancel
Save