blob: 565794f0132e95161c00aa8a9383b3e718c62c4b [file] [log] [blame]
import numpy as np
# Uses least squares regression to find the solution
# when there is one unknown variable.
def print_lstsq_solution(A, B):
A_inv = np.linalg.pinv(A)
x = np.matmul(A_inv, B)
print("least squares solution:", x[0][0])
# Uses the pseudoinverse matrix to find the solution
# when there are two unknown variables.
def print_pinv_solution(A, mv, B):
new_A = np.concatenate((A, mv), axis=1)
new_A_inv = np.linalg.pinv(new_A)
new_x = np.matmul(new_A_inv, B)
print("pinv solution:", new_x[0][0], new_x[1][0])
# Traverses the data and prints out one value for
# each update type.
def print_solutions(file_path):
data = np.genfromtxt(file_path, delimiter="\t")
prev_update = 0
split_list_indices = list()
for i, val in enumerate(data):
if prev_update != val[3]:
split_list_indices.append(i)
prev_update = val[3]
split = np.split(data, split_list_indices)
for array in split:
A, mv, B, update = np.hsplit(array, 4)
print("update type:", update[0][0])
print_lstsq_solution(A, B)
print_pinv_solution(A, mv, B)
print()
if __name__ == "__main__":
print_solutions("data/lowres_64f_target150_data.txt")