Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 51k
Added rank of matrix in linear algebra#8687
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Changes from all commits
52ec964df86e10a1e7bb76cca1cdcb96700c027189d157ec094519601d026c9b37b262c8af5261b5a31a80de4d39b3fa92afb5191301726ae683139cd8d2090b13df68d6caaffc66a5bFile filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,89 @@ | ||
| """ | ||
| Calculate the rank of a matrix. | ||
| See: https://en.wikipedia.org/wiki/Rank_(linear_algebra) | ||
| """ | ||
| def rank_of_matrix(matrix: list[list[int | float]]) -> int: | ||
| """ | ||
| Finds the rank of a matrix. | ||
| Args: | ||
| matrix: The matrix as a list of lists. | ||
| Returns: | ||
| The rank of the matrix. | ||
| Example: | ||
| >>> matrix1 = [[1, 2, 3], | ||
| ... [4, 5, 6], | ||
| ... [7, 8, 9]] | ||
| >>> rank_of_matrix(matrix1) | ||
| 2 | ||
| >>> matrix2 = [[1, 0, 0], | ||
| ... [0, 1, 0], | ||
| ... [0, 0, 0]] | ||
| >>> rank_of_matrix(matrix2) | ||
| 2 | ||
| >>> matrix3 = [[1, 2, 3, 4], | ||
| ... [5, 6, 7, 8], | ||
| ... [9, 10, 11, 12]] | ||
| >>> rank_of_matrix(matrix3) | ||
| 2 | ||
| >>> rank_of_matrix([[2,3,-1,-1], | ||
| ... [1,-1,-2,4], | ||
| ... [3,1,3,-2], | ||
| ... [6,3,0,-7]]) | ||
| 4 | ||
| >>> rank_of_matrix([[2,1,-3,-6], | ||
| ... [3,-3,1,2], | ||
| ... [1,1,1,2]]) | ||
| 3 | ||
| >>> rank_of_matrix([[2,-1,0], | ||
| ... [1,3,4], | ||
| ... [4,1,-3]]) | ||
| 3 | ||
| >>> rank_of_matrix([[3,2,1], | ||
| ... [-6,-4,-2]]) | ||
| 1 | ||
| >>> rank_of_matrix([[],[]]) | ||
Member There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please add: ContributorAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ok sir ContributorAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for your suggestions ContributorAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I hope this is ready to merge | ||
| 0 | ||
| >>> rank_of_matrix([[1]]) | ||
| 1 | ||
| >>> rank_of_matrix([[]]) | ||
| 0 | ||
| """ | ||
Contributor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. add more unique doctests. ContributorAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ok ContributorAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. removed my name and added more unique doctests Contributor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. add doctest for two empty lists ContributorAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. oook ContributorAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. is there any more corrections ContributorAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thank you for your support sir | ||
| rows = len(matrix) | ||
| columns = len(matrix[0]) | ||
| rank = min(rows, columns) | ||
| for row in range(rank): | ||
| # Check if diagonal element is not zero | ||
| if matrix[row][row] != 0: | ||
| # Eliminate all the elements below the diagonal | ||
| for col in range(row + 1, rows): | ||
| multiplier = matrix[col][row] / matrix[row][row] | ||
| for i in range(row, columns): | ||
| matrix[col][i] -= multiplier * matrix[row][i] | ||
| else: | ||
| # Find a non-zero diagonal element to swap rows | ||
| reduce = True | ||
| for i in range(row + 1, rows): | ||
| if matrix[i][row] != 0: | ||
| matrix[row], matrix[i] = matrix[i], matrix[row] | ||
| reduce = False | ||
| break | ||
| if reduce: | ||
| rank -= 1 | ||
| for i in range(rows): | ||
| matrix[i][row] = matrix[i][rank] | ||
| # Reduce the row pointer by one to stay on the same row | ||
| row -= 1 | ||
| return rank | ||
| if __name__ == "__main__": | ||
| import doctest | ||
| doctest.testmod() | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no need to give name.