diff --git a/hw_numpy/README.md b/hw_numpy/README.md new file mode 100644 index 0000000..384ff3f --- /dev/null +++ b/hw_numpy/README.md @@ -0,0 +1,8 @@ +Script *numpy.challenge* creates 3 numpy arrays in 3 different ways and implements several functions using **numpy** library: + +1. matrix_multiplication() - takes 2 matrices, returns their matrix multiplication; +2. multiplication_check() - takes list of matrixes, returns True if they can be multiplied, otherwise returns False; +3. multiply_matrices() - takes list of matrixes, returns their matrix multiplication if they can be multiplied; +4. compute_2d_distance() - takes 2 1-dimensional arrays, returns distance between them; +5. compute_multidimensional_distance() - takes 2 1-dimensional arrays, returns distance between them; +6. compute_pair_distances() - takes matrix, returns matrix of pair distances for its rows. diff --git a/hw_numpy/numpy_challenge.py b/hw_numpy/numpy_challenge.py new file mode 100644 index 0000000..f392ff0 --- /dev/null +++ b/hw_numpy/numpy_challenge.py @@ -0,0 +1,46 @@ +import numpy as np + +if __name__ == "__main__": + # Creating an array from a list(the first way): + array1 = np.array([6, 6, 6]) + # Creating an array with arange (the second way): + array2 = np.arange(6) + # Creating an array of zeros (the third way): + array3 = np.zeros(6) + + +# This function computes matrix multiplication of 2 matrices +def matrix_multiplication(matrix1, matrix2): + return np.matmul(matrix1, matrix2) + +# This function checks whether multiple matrices can be multiplied +def multiplication_check(*matrices): + for i in range(len(matrices) - 1): + if matrices[i].shape[1] != matrices[i+1].shape[0]: + return False + return True + +# This function computes matrix multiplication of several matrices (if possible) +def multiply_matrices(*matrices): + if multiplication_check(*matrices): + return np.linalg.multi_dot(matrices) + else: + return None + +# This function computes distance between 2 point in 2-dimensional space +def compute_2d_distance(array1, array2): + return np.linalg.norm(array2 - array1) + +# This function computes distance between 2 point in multidimensional space +def compute_multidimensional_distance(array1, array2): + return np.linalg.norm(array2 - array1) + +# This function computes matrix of pair distances between rows of input matrix +def compute_pair_distances(matrix): + dim = matrix.shape[0] # amount of rows in input matrix + pair_distances = np.zeros((dim, dim)) + for n_row in range(dim): + for n_col in range(dim): + if n_row != n_col: # filling matrix of pair distances + pair_distances[n_row, n_col] = np.linalg.norm(matrix[n_row] - matrix[n_col]) + return pair_distances