From a902eabbc1d6d210a95d518184b5b89f850d52a6 Mon Sep 17 00:00:00 2001 From: PWC <1010789153@qq.com> Date: Mon, 16 Dec 2024 16:01:40 +0100 Subject: [PATCH 1/5] up my solution --- numpy_questions.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/numpy_questions.py b/numpy_questions.py index 07a10c1..01543df 100644 --- a/numpy_questions.py +++ b/numpy_questions.py @@ -41,6 +41,22 @@ def max_index(X): j = 0 # TODO + # Check whether input is a numpy array + if not isinstance(X, np.ndarray): + raise ValueError("ValueError:input array is not a numpy array.") + + # Check whether input is 2D + if X.ndim != 2: + raise ValueError("ValueError:input array is not 2D.") + + # initial the max_val + max = float('-inf') + + for row in range(X.shape[0]): # go through all ligns + for col in range(X.shape[1]): # go through all columns + if X[row, col] > max: # + max = X[row, col] # update the max_value + i, j = row, col # update the max_index return i, j @@ -64,4 +80,15 @@ def wallis_product(n_terms): """ # XXX : The n_terms is an int that corresponds to the number of # terms in the product. For example 10000. - return 0. + + if n_terms < 0: + raise ValueError("ValueError:n_terms isn't a positive value.") + + product = 1.0 # `n_terms=0` will consider the product to be `1`, so n_terms >= 0 starts product 1.0 + for n in range(1, n_terms + 1): # go through from 1 to n_terms + numerator = 4 * n**2 + denominator = 4 * n**2 - 1 + product *= numerator / denominator # calcaulate the each term result + + return 2 * product # pi/2 is wallis formula result + From b1993a053f2389e200596a3dd4f39ea86e989868 Mon Sep 17 00:00:00 2001 From: PWC <1010789153@qq.com> Date: Mon, 16 Dec 2024 16:01:45 +0100 Subject: [PATCH 2/5] up my solution --- numpy_questions.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/numpy_questions.py b/numpy_questions.py index 01543df..e1d7b24 100644 --- a/numpy_questions.py +++ b/numpy_questions.py @@ -83,12 +83,11 @@ def wallis_product(n_terms): if n_terms < 0: raise ValueError("ValueError:n_terms isn't a positive value.") - - product = 1.0 # `n_terms=0` will consider the product to be `1`, so n_terms >= 0 starts product 1.0 + + product = 1.0 #`n_terms=0` will consider the product to be `1` for n in range(1, n_terms + 1): # go through from 1 to n_terms numerator = 4 * n**2 denominator = 4 * n**2 - 1 product *= numerator / denominator # calcaulate the each term result - return 2 * product # pi/2 is wallis formula result - + return 2 * product # pi/2 is wallis formula result \ No newline at end of file From 3928dfef87f16f82490d02d7a2274e0b80bb2883 Mon Sep 17 00:00:00 2001 From: PWC <1010789153@qq.com> Date: Mon, 16 Dec 2024 16:24:21 +0100 Subject: [PATCH 3/5] up my solution --- numpy_questions.py | 74 ++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 46 deletions(-) diff --git a/numpy_questions.py b/numpy_questions.py index e1d7b24..7a47175 100644 --- a/numpy_questions.py +++ b/numpy_questions.py @@ -1,20 +1,3 @@ -"""Assignment - using numpy and making a PR. - -The goals of this assignment are: - * Use numpy in practice with two easy exercises. - * Use automated tools to validate the code (`pytest` and `flake8`) - * Submit a Pull-Request on github to practice `git`. - -The two functions below are skeleton functions. The docstrings explain what -are the inputs, the outputs and the expected error. Fill the function to -complete the assignment. The code should be able to pass the test that we -wrote. To run the tests, use `pytest test_numpy_question.py` at the root of -the repo. It should say that 2 tests ran with success. - -We also ask to respect the pep8 convention: https://pep8.org. -This will be enforced with `flake8`. You can check that there is no flake8 -errors by calling `flake8` at the root of the repo. -""" import numpy as np @@ -29,7 +12,7 @@ def max_index(X): Returns ------- (i, j) : tuple(int) - The row and columnd index of the maximum. + The row and column index of the maximum. Raises ------ @@ -37,26 +20,23 @@ def max_index(X): If the input is not a numpy array or if the shape is not 2D. """ - i = 0 - j = 0 - - # TODO - # Check whether input is a numpy array + # Check whether input is a numpy array if not isinstance(X, np.ndarray): - raise ValueError("ValueError:input array is not a numpy array.") - + raise ValueError("Input array is not a numpy array.") + # Check whether input is 2D if X.ndim != 2: - raise ValueError("ValueError:input array is not 2D.") - - # initial the max_val - max = float('-inf') + raise ValueError("Input array is not 2D.") + + # Initialize the max value and indices + max_val = float('-inf') + i, j = 0, 0 - for row in range(X.shape[0]): # go through all ligns - for col in range(X.shape[1]): # go through all columns - if X[row, col] > max: # - max = X[row, col] # update the max_value - i, j = row, col # update the max_index + for row in range(X.shape[0]): # Iterate through all rows + for col in range(X.shape[1]): # Iterate through all columns + if X[row, col] > max_val: + max_val = X[row, col] # Update the maximum value + i, j = row, col # Update the indices of the maximum return i, j @@ -77,17 +57,19 @@ def wallis_product(n_terms): ------- pi : float The approximation of order `n_terms` of pi using the Wallis product. - """ - # XXX : The n_terms is an int that corresponds to the number of - # terms in the product. For example 10000. + Raises + ------ + ValueError + If n_terms is negative. + """ if n_terms < 0: - raise ValueError("ValueError:n_terms isn't a positive value.") - - product = 1.0 #`n_terms=0` will consider the product to be `1` - for n in range(1, n_terms + 1): # go through from 1 to n_terms - numerator = 4 * n**2 - denominator = 4 * n**2 - 1 - product *= numerator / denominator # calcaulate the each term result - - return 2 * product # pi/2 is wallis formula result \ No newline at end of file + raise ValueError("n_terms must be a non-negative integer.") + # `n_terms=0` will consider the product to be 1 + product = 1.0 + # Iterate from 1 to n_terms + for n in range(1, n_terms + 1): + numerator = 4 * n**2 + denominator = 4 * n**2 - 1 + product *= numerator / denominator # Compute each term in the product + return 2 * product # Multiply by 2 to compute pi From c188f53aa82de920e2c8686c49e6aca9cade7309 Mon Sep 17 00:00:00 2001 From: PWC <1010789153@qq.com> Date: Mon, 16 Dec 2024 16:30:15 +0100 Subject: [PATCH 4/5] up my solution --- numpy_questions.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/numpy_questions.py b/numpy_questions.py index 7a47175..b157c54 100644 --- a/numpy_questions.py +++ b/numpy_questions.py @@ -1,3 +1,10 @@ +"""numpy_questions.py + +This module contains two functions: +1. max_index: Returns the index of the maximum value in a 2D numpy array. +2. wallis_product: Computes an approximation of pi using the Wallis product. +""" + import numpy as np @@ -24,7 +31,7 @@ def max_index(X): if not isinstance(X, np.ndarray): raise ValueError("Input array is not a numpy array.") - # Check whether input is 2D + # Check whether input is 2D array if X.ndim != 2: raise ValueError("Input array is not 2D.") From 18a49949afc7dbaed51dd8b400542e497661fd5a Mon Sep 17 00:00:00 2001 From: PWC <1010789153@qq.com> Date: Mon, 16 Dec 2024 16:32:29 +0100 Subject: [PATCH 5/5] up my solution --- numpy_questions.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/numpy_questions.py b/numpy_questions.py index b157c54..c63283d 100644 --- a/numpy_questions.py +++ b/numpy_questions.py @@ -1,8 +1,10 @@ -"""numpy_questions.py +"""This module implements functions for numpy-based operations. -This module contains two functions: +It includes: 1. max_index: Returns the index of the maximum value in a 2D numpy array. 2. wallis_product: Computes an approximation of pi using the Wallis product. + +The module is designed for practicing numpy, automated tools, and git workflows. """ import numpy as np