# 33.2 Row Space Bases

Many computations with row spaces require the computation of a basis (which will always mean a vector space basis in GAP), such as the computation of the dimension, or efficient membership test for the row space.

Most of these computations do not rely on special properties of the chosen basis. The computation of coefficients lists, however, is basis dependent. A natural way to distinguish these two situations is the following.

For basis independent questions the row space is allowed to compute a suitable basis, and may store bases. For example the dimension of the space V can be computed this way using `Dimension( V )`. In such situations the component `V.basis` is used. The value of this component depends on how it was constructed, so no function that accesses this component should assume special properties of this basis.

On the other hand, the computation of coefficients of a vector v with respect to a basis B of V depends on this basis, so you have to call `Coefficients( B, v )`, and not `Coefficients( V, v )`.

It should be mentioned that there are two types of row space bases. A basis of the first type is semi-echelonized (see SemiEchelonBasis for the definition and examples), its structure allows to perform efficient calculations of membership test and coefficients.

A basis of the second type is arbitrary, that is, it has no special properties. There are two ways to construct such a (user-defined) basis that is not necessarily semi-echelonized. The first is to call `RowSpace` with the optional argument `"basis"`; this means that the generators are known to be linearly independent (see RowSpace). The second way is to call `Basis` with two arguments (see Basis). The computation of coefficients with respect to an arbitrary basis is performed by computing a semi-echelonized basis, delegating the task to this basis, and then performing the base change.

The functions that are available for row space bases are `Coefficients` (see Coefficients for Row Space Bases) and `SiftedVector` (see SiftedVector).

The several available row space bases are described in Basis, CanonicalBasis, and SemiEchelonBasis. For details of the implementation see Row Space Basis Records.

GAP 3.4.4
April 1997