The Column Space

A matrix isn't just a grid of numbers — it's a machine. Feed it an input vector \vec{x} and out comes a new vector A\vec{x}. A natural, almost greedy question follows: as you feed in every possible input, which outputs can the machine actually produce? Which vectors are within reach, and which are forever out of bounds no matter what you push in? That reachable territory has a name — the column space — and it turns out to be one of the most useful objects attached to any matrix.

Here is the key observation that unlocks everything. Writing A by its columns \vec{a}_1, \vec{a}_2, \dots, \vec{a}_n and \vec{x} = (x_1, x_2, \dots, x_n), the product A\vec{x} is exactly a weighted blend of the columns:

A\vec{x} = x_1\,\vec{a}_1 + x_2\,\vec{a}_2 + \dots + x_n\,\vec{a}_n.

So every output A\vec{x} is a linear combination of the columns, and the input \vec{x} just supplies the weights. Sweep \vec{x} over all of input space and you sweep the outputs over every possible combination of the columns — which is precisely their span. That gives the whole idea in one line:

The link that makes it matter: solvability

The column space isn't just a tidy definition — it answers the single most important question you can ask about a linear system. Suppose you want to solve A\vec{x} = \vec{b}. Finding a solution means finding weights x_1, \dots, x_n so that x_1\vec{a}_1 + \dots + x_n\vec{a}_n = \vec{b} — in other words, writing \vec{b} as a combination of the columns. But that is exactly what it means for \vec{b} to be in the column space. So:

The system A\vec{x} = \vec{b} has a solution if and only if \vec{b} \in \operatorname{Col}(A).

Read that both ways. If \vec{b} sits inside the reachable territory, some input hits it — the system is consistent. If \vec{b} lies even a hair outside, no input can ever produce it and the system has no solution at all. The column space is the complete map of every right-hand side the system can honestly hit.

Worked example 1: is this \vec{b} reachable?

Take the 3\times 2 matrix with two independent columns

A = \begin{bmatrix} 1 & 0 \\ 1 & 1 \\ 0 & 1 \end{bmatrix}, \qquad \vec{a}_1 = \begin{bmatrix}1\\1\\0\end{bmatrix}, \quad \vec{a}_2 = \begin{bmatrix}0\\1\\1\end{bmatrix}.

These two columns point in genuinely different directions, so their span is a flat plane through the origin, floating inside \mathbb{R}^3 — not a line, and not all of 3D space. That plane is \operatorname{Col}(A). Now ask: can we solve A\vec{x} = \vec{b} for \vec{b} = (1, 3, 2)? We need weights with

x_1\begin{bmatrix}1\\1\\0\end{bmatrix} + x_2\begin{bmatrix}0\\1\\1\end{bmatrix} = \begin{bmatrix}1\\3\\2\end{bmatrix} \;\Longrightarrow\; x_1 = 1,\; x_1 + x_2 = 3,\; x_2 = 2.

The first and third rows force x_1 = 1 and x_2 = 2, and the middle row checks out: 1 + 2 = 3. Consistent! So \vec{b} = (1,3,2) is in \operatorname{Col}(A), and \vec{x} = (1, 2) is the input that hits it.

Now try \vec{b} = (1, 0, 1). The same reasoning gives x_1 = 1 from the top row and x_2 = 1 from the bottom — but then the middle row wants x_1 + x_2 = 0, i.e. 1 + 1 = 0, which is false. No weights work. This \vec{b} lies just off the plane, so A\vec{x} = \vec{b} is inconsistent — no solution exists. (In fact a point (b_1, b_2, b_3) is on this particular plane exactly when b_1 + b_3 = b_2 — check both examples against that!)

Seeing the span: two columns and a target

The figure works in the plane so we can watch it move. The blue and orange arrows are two columns of a matrix; the grey lattice marks combinations x_1\vec{a}_1 + x_2\vec{a}_2, and the marked point is a target \vec{b}. Rotate the second column with the slider. While the two columns point different ways, their combinations flood the whole plane — the column space is all of \mathbb{R}^2 and \vec{b} is reachable. Swing the orange column onto the blue one and the span collapses to a single line: now \vec{b} sits off that line and A\vec{x}=\vec{b} becomes unsolvable.

Worked example 2: a basis from the pivot columns

When the columns are not all independent, the column space is smaller than the number of columns suggests, and we'd like a clean, minimal spanning set — a basis. Consider

A = \begin{bmatrix} 1 & 2 & 1 \\ 2 & 4 & 3 \\ 3 & 6 & 4 \end{bmatrix}.

Notice the second column is exactly 2 times the first — a passenger that adds no new direction. To find which columns genuinely count, row-reduce A and see where the pivots land:

A \;\xrightarrow{\text{row reduce}}\; \begin{bmatrix} \boxed{1} & 2 & 0 \\ 0 & 0 & \boxed{1} \\ 0 & 0 & 0 \end{bmatrix}.

The pivots sit in columns 1 and 3. The rule for a basis of the column space is then: take those same pivot columns — but from the original matrix A, not from the reduced form. So a basis for \operatorname{Col}(A) is

\left\{\; \begin{bmatrix}1\\2\\3\end{bmatrix},\; \begin{bmatrix}1\\3\\4\end{bmatrix} \;\right\} \qquad\Longrightarrow\qquad \dim \operatorname{Col}(A) = 2.

Two pivots, so the column space is 2-dimensional — a plane inside \mathbb{R}^3. That count of pivots (equal to the number of independent columns) is exactly the rank of the matrix. The dropped column 2 was 2\vec{a}_1, already spanned by the first, so leaving it out costs us nothing.

Engineers meet this constantly. Imagine a mixing rig with two supply lines — line 1 delivers the blend \vec{a}_1 of three chemicals, line 2 delivers \vec{a}_2 — and you can dial each line up or down (even in reverse, if the line can extract as well as add). The set of final mixtures you can ever produce is exactly the column space of A = [\,\vec{a}_1\ \vec{a}_2\,]. If a customer orders a target mixture \vec{b}, the order is fillable precisely when \vec{b} lies in that column space — otherwise, no setting of the dials will ever reach it, and you either add a third supply line (a new column, enlarging the reachable space) or tell the customer it's impossible.

That's the whole practical punch of "consistent iff \vec{b}\in\operatorname{Col}(A)": the column space is your catalogue of everything the machine can make, and its rank is how many truly independent knobs you've got.

Two traps snare almost everyone the first time:

Where this goes next

The column space is one half of a beautiful bookkeeping law. It measures the outputs a matrix can reach (its rank); its partner, the null space, measures the inputs a matrix crushes to zero (its nullity). The rank–nullity theorem ties the two together: rank plus nullity always equals the number of columns. Master the column space now and that theorem will feel almost inevitable.