How to reconstruct a full sparse matrix from a compact (triplet) matrix in C#

1 Answer

0 votes
using System;

class RebuildSparseMatrix
{
    // A sparse matrix is a matrix in which the majority of elements are zero.

    // To rebuild a sparse matrix from a compact (triplet) representation,
    // we create a full matrix initialized with zeros, then place each
    // non‑zero element at its (row, column) position.

    // Build full sparse matrix from compact triplet form
    static int[,] BuildSparseFromCompact(int[,] compact, int count)
    {
        int[] rowIdx = new int[count];
        int[] colIdx = new int[count];
        int[] values = new int[count];

        for (int i = 0; i < count; i++) {
            rowIdx[i] = compact[0, i];
            colIdx[i] = compact[1, i];
            values[i] = compact[2, i];
        }

        // Determine matrix dimensions automatically
        int maxRow = 0;
        int maxCol = 0;

        for (int i = 0; i < count; i++) {
            if (rowIdx[i] > maxRow) maxRow = rowIdx[i];
            if (colIdx[i] > maxCol) maxCol = colIdx[i];
        }

        int rows = maxRow + 1;
        int cols = maxCol + 1;

        // Create full matrix initialized with zeros
        int[,] sparse = new int[rows, cols];

        // Fill matrix
        for (int i = 0; i < count; i++) {
            sparse[rowIdx[i], colIdx[i]] = values[i];
        }

        return sparse;
    }

    // Print a matrix
    static void PrintMatrix(int[,] mat, string title)
    {
        Console.WriteLine(title);

        int rows = mat.GetLength(0);
        int cols = mat.GetLength(1);

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++)
                Console.Write(mat[i, j] + " ");
            Console.WriteLine();
        }

        Console.WriteLine();
    }

    static void Main()
    {
        // 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

        int[,] compact =
        {
            {0, 0, 1, 1, 1, 3, 3, 3, 4},  // row indices
            {2, 4, 2, 3, 6, 1, 2, 5, 4},  // column indices
            {3, 8, 5, 7, 1, 2, 6, 4, 9}   // values
        };

        Console.WriteLine("Compact matrix:");
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 9; j++)
                Console.Write(compact[i, j] + " ");
            Console.WriteLine();
        }
        Console.WriteLine();

        int[,] sparse = BuildSparseFromCompact(compact, 9);

        PrintMatrix(sparse, "Sparse matrix (auto-sized):");
    }
}


/*
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 

Sparse matrix (auto-sized):
0 0 3 0 8 0 0 
0 0 5 7 0 0 1 
0 0 0 0 0 0 0 
0 2 6 0 0 4 0 
0 0 0 0 9 0 0 

*/

 



answered 23 hours ago by avibootz

Related questions

...