Compare commits

...

6 Commits

Author SHA1 Message Date
Jay Prajapati
2adb16041f
Merge 658c48493b7097bb51552ebb10ce76c4c5ea00af into e59d819d091efdb30e385f4ecfe9ab5d36c3be71 2025-02-08 19:06:29 +05:30
pre-commit-ci[bot]
e59d819d09
[pre-commit.ci] pre-commit autoupdate (#12554)
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.9.3 → v0.9.4](https://github.com/astral-sh/ruff-pre-commit/compare/v0.9.3...v0.9.4)
- [github.com/codespell-project/codespell: v2.4.0 → v2.4.1](https://github.com/codespell-project/codespell/compare/v2.4.0...v2.4.1)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-02-05 20:47:41 +01:00
pre-commit-ci[bot]
658c48493b [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2024-10-12 21:38:48 +00:00
Jay Prajapati
16124fc63c fix: failed tests 2024-10-13 03:08:08 +05:30
pre-commit-ci[bot]
370d5fdcd3 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2024-10-12 21:23:24 +00:00
Jay Prajapati
8f314e99c6 [Add] Kronecker Product 2024-10-13 02:48:54 +05:30
2 changed files with 77 additions and 2 deletions

View File

@ -16,13 +16,13 @@ repos:
- id: auto-walrus
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.9.3
rev: v0.9.4
hooks:
- id: ruff
- id: ruff-format
- repo: https://github.com/codespell-project/codespell
rev: v2.4.0
rev: v2.4.1
hooks:
- id: codespell
additional_dependencies:

View File

@ -0,0 +1,75 @@
# @Author : jay2219
# @File : kronecker_product.py
# @Date : 13/10/2024
"""
Perform Kronecker product of two matrices.
https://en.wikipedia.org/wiki/Kronecker_product
"""
def is_2d(matrix: list[list[int]]) -> bool:
"""
>>> is_2d([])
True
>>> is_2d([1, 2])
False
>>> is_2d([[1, 2], [3, 4]])
True
"""
return all(isinstance(matrix, list) and (isinstance(i, list) for i in matrix))
def kronecker_product(
matrix_a: list[list[int]], matrix_b: list[list[int]]
) -> list[list[int]]:
"""
:param matrix_a: A 2-D Matrix with dimension m x n
:param matrix_b: Another 2-D Matrix with dimension p x q
:return: Result of matrix_a matrix_b
:raises ValueError: If the matrices are not 2-D.
>>> kronecker_product([[1, 2]], [[5, 6], [7, 8]])
[[5, 6, 10, 12], [7, 8, 14, 16]]
>>> kronecker_product([[1, 2], [4, 5]], [[5, 6], [7, 8]])
[[5, 6, 10, 12], [7, 8, 14, 16], [20, 24, 25, 30], [28, 32, 35, 40]]
>>> kronecker_product([1, 2], [[5, 6], [7, 8]])
Traceback (most recent call last):
...
ValueError: Input matrices must be 2-D.
"""
# Check if the input matrices are valid
if not all((is_2d(matrix_a), is_2d(matrix_b))):
raise ValueError("Input matrices must be 2-D.")
if not matrix_a or not matrix_b:
return []
rows_matrix_a, cols_matrix_a = len(matrix_a), len(matrix_a[0])
rows_matrix_b, cols_matrix_b = len(matrix_b), len(matrix_b[0])
# Resultant matrix dimensions
result = [
[0] * (cols_matrix_a * cols_matrix_b)
for _ in range(rows_matrix_a * rows_matrix_b)
]
for r_index_a in range(rows_matrix_a):
for c_index_a in range(cols_matrix_a):
for r_index_b in range(rows_matrix_b):
for c_index_b in range(cols_matrix_b):
result[r_index_a * rows_matrix_b + r_index_b][
c_index_a * cols_matrix_b + c_index_b
] = matrix_a[r_index_a][c_index_a] * matrix_b[r_index_b][c_index_b]
return result
if __name__ == "__main__":
import doctest
doctest.testmod()