galois.FieldArray.row_space() Self

Computes the row space of the matrix \(\mathbf{A}\).

Returns:

The row space basis matrix. The rows of the basis matrix are the basis vectors that span the row space. The number of rows of the basis matrix is the dimension of the row space.

Notes

Given an \(m \times n\) matrix \(\mathbf{A}\) over \(\mathrm{GF}(q)\), the row space of \(\mathbf{A}\) is the vector space \(\{\mathbf{x} \in \mathrm{GF}(q)^n\}\) defined by all linear combinations of the rows of \(\mathbf{A}\). The row space has at most dimension \(\textrm{min}(m, n)\).

The row space has properties \(\mathcal{R}(\mathbf{A}) = \mathcal{C}(\mathbf{A}^T)\) and \(\textrm{dim}(\mathcal{R}(\mathbf{A})) + \textrm{dim}(\mathcal{LN}(\mathbf{A})) = m\).

Examples

The row_space() method defines basis vectors (its rows) that span the row space of \(\mathbf{A}\).

In [1]: m, n = 5, 3

In [2]: GF = galois.GF(31)

In [3]: A = GF.Random((m, n)); A
Out[3]: 
GF([[19, 29, 28],
    [ 8, 24, 18],
    [ 9,  1, 17],
    [30,  9, 30],
    [ 6,  3, 29]], order=31)

In [4]: R = A.row_space(); R
Out[4]: 
GF([[1, 0, 0],
    [0, 1, 0],
    [0, 0, 1]], order=31)

The dimension of the row space and left null space sum to \(m\).

In [5]: LN = A.left_null_space(); LN
Out[5]: 
GF([[ 1,  0,  9, 29, 14],
    [ 0,  1,  9, 11, 18]], order=31)

In [6]: R.shape[0] + LN.shape[0] == m
Out[6]: True