How to compact a sparse matrix in Python

1 Answer

0 votes
# A sparse matrix is a matrix in which the majority of elements are zero.

# To compact a sparse matrix, use a method to store only the non‑zero
# entries using a triplet representation (row, column, value). 
# This reduces memory usage.

# Convert a sparse matrix into compact (triplet) form
def compactMatrix(matrix):
    rows = len(matrix)
    cols = len(matrix[0])

    # Count non-zero elements
    count = sum(
        1
        for i in range(rows)
        for j in range(cols)
        if matrix[i][j] != 0
    )

    # Compact matrix has 3 rows: row index, col index, value
    compact = [
        [0] * count,
        [0] * count,
        [0] * count
    ]

    k = 0

    # Fill compact matrix
    for i in range(rows):
        for j in range(cols):
            if matrix[i][j] != 0:
                compact[0][k] = i      # row
                compact[1][k] = j      # column
                compact[2][k] = matrix[i][j]  # value
                k += 1

    return compact


matrix = [
    [0, 0, 3, 0, 8, 0, 0, 0, 0],
    [0, 0, 5, 7, 0, 0, 1, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 2, 6, 0, 0, 4, 0, 0, 0],
    [0, 0, 0, 0, 9, 0, 0, 0, 0]
]

compact = compactMatrix(matrix)

print("Compact matrix:")
for i in range(3):
    for j in range(len(compact[0])):
        print(compact[i][j], end=" ")
    print()



"""
run:

Compact matrix:
0 0 1 1 1 3 3 3 4 
2 4 2 3 6 1 2 5 4 
3 8 5 7 1 2 6 4 9 

"""

 



answered 1 day ago by avibootz
...