Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- class ShapeMismatchError(Exception):
- pass
- def get_projections_components(
- matrix: np.ndarray,
- vector: np.ndarray,
- ):# -> tuple[np.ndarray | None, np.ndarray | None]:
- if matrix.shape[0] != matrix.shape[1] or matrix.shape[0] != vector.shape[0]:
- raise ShapeMismatchError
- if np.linalg.det(matrix) == 0:
- return None, None
- coordinates_in_the_basis = np.linalg.solve(matrix.T, vector.T)
- zero_matrix = np.zeros(shape = matrix.shape)
- #coordinates_of_projections = np.diag(coordinates_in_the_basis)
- coordinates_of_projections = coordinates_in_the_basis * matrix
- orthogonal_projections = vector[np.newaxis, :] - coordinates_of_projections
- print("coordinates_of_projections")
- print(coordinates_of_projections)
- print()
- print("basis")
- print(matrix)
- print()
- print("vector")
- print(vector)
- print()
- print("coordinates_in_the_basis")
- print(coordinates_in_the_basis)
- print()
- print("zero_matrix")
- print(zero_matrix)
- print()
- print("vector[np.newaxis, :]")
- print(vector[np.newaxis, :])
- print()
- print("orthogonal_projections")
- print(orthogonal_projections)
- print()
- return coordinates_of_projections, orthogonal_projections
- matrix = np.diag([2, 3])
- vector = np.arange(start=1, stop=3)
- projections_expected = np.array([[1, 0], [0, 2]])
- orthogonals_expected = np.array([[0, 2], [1, 0]])
- projections, orthogonals = get_projections_components(matrix, vector)
- print("res")
- print()
- print("res_projections")
- print(projections)
- print()
- print("res_orthogonals")
- print(orthogonals)
- print()
- print("projections_expected")
- print(projections_expected)
- print()
- print("orthogonals_expected")
- print(orthogonals_expected)
- print()
- assert np.allclose(projections, projections_expected)
- assert np.allclose(orthogonals, orthogonals_expected)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement