Monday, April 6, 2026

The Geometry Behind the Dot Product: Unit Vectors, Projections, and Instinct



This text is the primary of three components. Every half stands by itself, so that you don’t must learn the others to grasp it.

The dot product is among the most necessary operations in machine studying – however it’s laborious to grasp with out the proper geometric foundations. On this first half, we construct these foundations:

· Unit vectors

· Scalar projection

· Vector projection

Whether or not you’re a scholar studying Linear Algebra for the primary time, or need to refresh these ideas, I like to recommend you learn this text.

In actual fact, we’ll introduce and clarify the dot product on this article, and within the subsequent article, we’ll discover it in higher depth.

The vector projection part is included as an non-obligatory bonus: useful, however not obligatory for understanding the dot product.

The following half explores the dot product in higher depth: its geometric which means, its relationship to cosine similarity, and why the distinction issues.

The ultimate half connects these concepts to 2 main functions: advice programs and NLP.


A vector 𝐯giant mathbf{vec{v}} is known as a unit vector if its magnitude is 1:

|𝐯|=1LARGE mathbf{|vec{v}|} = 1

To take away the magnitude of a non-zero vector whereas protecting its path, we are able to normalize it. Normalization scales the vector by the issue:

1|𝐯|LARGE frac{1}{|mathbf{vec{v}}|}

The normalized vector 𝐯^giant mathbf{hat{v}}  is the unit vector within the path of 𝐯giant mathbf{vec{v}}

𝐯^=𝐯|𝐯|LARGE start{array} hline mathbf{hat{v}} = frac{mathbf{vec{v}}}{|mathbf{vec{v}}|} hline finish{array}

Notation 1. Any more, every time we normalize a vector 𝐯giant mathbf{vec{v}},  or write 𝐯^giant mathbf{hat{v}}, we assume that 𝐯0giant mathbf{vec{v}} neq 0. This notation, together with those that observe, can also be related to the next articles.

This operation naturally separates a vector into its magnitude and its path:

𝐯=|𝐯|magnitude𝐯^pathLARGE start{array} hline rule{0pt}{2.5em} mathbf{vec{v}} = underbrace{|mathbf{vec{v}}|}_{textual content{magnitude}} cdot underbrace{mathbf{hat{v}}}_{textual content{path}} [4.5em] hline finish{array}

Determine 1 illustrates this concept: 𝐯{mathbf{v}} and 𝐯^giant mathbf{hat{v}} level in the identical path, however have completely different magnitudes.

Determine 1-Separating “How A lot” from “Which Means”. Any vector may be written because the product of its magnitude and its unit vector, which preserves path however has size 1. Picture by Creator (created utilizing Claude).

Similarity of unit vectors

In two dimensions, all unit vectors lie on the unit circle (radius 1, centered on the origin). A unit vector that kinds an angle θ with the x-axis has coordinates (cos θ, sin θ).

This implies the angle between two unit vectors encodes a pure similarity rating - as we’ll present shortly, this rating is strictly cos θ: equal to 1 after they level the identical means, 0 when perpendicular, and −1 when reverse.

Notation 2. All through this text, θ denotes the smallest angle between the 2 vectors, so 0°θ180°0° leq theta leq 180° .

In apply, we don’t know θ instantly – we all know the vectors’ coordinates.

We are able to present why the dot product of two unit vectors: a^largehat{a} and b^largehat{b} equals cos θ utilizing a geometrical argument in three steps:

1. Rotate the coordinate system till b^largehat{b} lies alongside the x-axis. Rotation doesn’t change angles or magnitudes.

2. Learn off the brand new coordinates. After rotation, b^largehat{b} has coordinates (1 , 0). Since a^largehat{a} is a unit vector at angle θ from the x-axis, the unit circle definition provides its coordinates as (cos θ, sin θ).

3. Multiply corresponding parts and sum:

a^b^=axbx+ayby=cosθ1+sinθ0=cosθGiant start{aligned} hat{a} cdot hat{b} = a_x cdot b_x + a_y cdot b_y = costheta cdot 1 + sintheta cdot 0 = costheta finish{aligned}

This sum of component-wise merchandise is known as the dot product:

ab=a1b1+a2b2++anbnGiant boxed{ start{aligned} vec{a} cdot vec{b} = a_1 cdot b_1 + a_2 cdot b_2 + cdots + a_n cdot b_n finish{aligned} }

See the illustration of those three steps in Determine 2 beneath:

Determine 2- By rotating our perspective to align with the x-axis, the coordinate math simplifies fantastically to disclose why the 2 unit vectors’ dot product is the same as cos(θ). Picture by Creator (created utilizing Claude).

All the things above was proven in 2D, however the identical outcome holds in any variety of dimensions. Any two vectors, regardless of what number of dimensions they reside in, all the time lie in a single flat airplane. We are able to rotate that airplane to align with the xy-plane — and from there, the 2D proof applies precisely.

Notation 3. Within the diagrams that observe, we frequently draw one of many vectors (sometimes blargevec{b}) alongside the horizontal axis. When blargevec{b} will not be already aligned with the x-axis, we are able to all the time rotate our coordinate system as we did above (the “rotation trick”). Since rotation preserves all lengths, angles, and dot merchandise, each formulation derived on this orientation holds for any path of blargevec{b}.


A vector can contribute in lots of instructions directly, however usually we care about just one path.

Scalar projection solutions the query: How a lot 𝒂giant boldsymbol{vec{a}} of lies alongside the path of 𝒃giant boldsymbol{vec{b}}?

This worth is detrimental if the projection factors in the wrong way of blargevec{b}.

The Shadow Analogy

Essentially the most intuitive means to consider scalar projection is because the size of a shadow. Think about you maintain a stick (vector agiant vec{a}) at an angle above the bottom (the path of blargevec{b}), and a light-weight supply shines straight down from above.

The shadow that the stick casts on the bottom is the scalar projection.

The animated determine beneath illustrates this concept:

Determine 3- Scalar projection as a shadow.
 The scalar projection measures how a lot of vector a lies within the path of b.
 It equals the size of the shadow that a casts onto b (Woo, 2023). The GIF was created by Claude

Calculation

Think about a light-weight supply shining straight down onto the road PS (the path of blargevec{b}). The “shadow” that alargevec{a} (the arrow from P to Q ) casts onto that line is strictly the phase PR. You possibly can see this in Determine 4.

Determine 4: Measuring Directional Alignment. The scalar projection (phase PR) visually solutions the core query: “How a lot of vector a lies within the precise path of vector b.” Picture by Creator (created utilizing Claude).

Deriving the formulation

Now take a look at the triangle  PQRgiant PQR: the perpendicular drop from Qgiant Q creates a proper triangle, and its sides are:

  •  PQ=|a|giant PQ = |vec{a}| (the hypotenuse).
  •  PRgiant PR (the adjoining facet – the shadow).
  •  QRgiant QR (the other facet – the perpendicular part).

From this triangle:

  1. The angle between alargevec{a} and blargevec{b} is θ.
  2. cos(θ)=PR|a|giant cos(theta) = frac{PR}{|vec{a}|} (essentially the most primary definition of cosine).
  3. Multiply each side by |a|giant|vec{a}| :

PR=|a|cos(θ)LARGE start{array} hline PR = |vec{a}| cos(theta) hline finish{array}

The Phase 𝑷𝑹boldsymbol{PR} is the shadow size – the scalar projection of 𝒂giant boldsymbol{vec{a}} on 𝒃giant boldsymbol{vec{b}}.

When θ > 90°, the scalar projection turns into detrimental too. Consider the shadow as flipping to the other facet.

How is the unit vector associated?

The shadow’s size (PR) doesn’t depend upon how lengthy blargevec{b} is. It is dependent upon |a|giant|vec{a}| and on θ.

Whenever you compute ab^largevec{a} cdot hat{b}, you might be asking: how a lot of alargevec{a} lies alongside blargevec{b} path?  That is the shadow size.

The unit vector acts like a path filter: multiplying alargevec{a} by it extracts the part of alargevec{a} alongside that path.

Let’s see it utilizing the rotation trick. We place b̂ alongside the x-axis:

a=(|a|cosθ, |a|sin(θ))Giant vec{a} = (|vec{a}|costheta, |vec{a}|sin(theta))

and:

b^=(1,0)Giant hat{b} = (1, 0)

Then:

ab^=|a|cosθ1+|a|sin(θ)0=|a|cosθGiant start{aligned} vec{a} cdot hat{b} = |vec{a}|costheta cdot 1 + |vec{a}|sin(theta) cdot 0 = |vec{a}|costheta finish{aligned}

The scalar projection of 𝒂giant boldsymbol{vec{a}} within the path of 𝒃giant boldsymbol{vec{b}} is:

|a|cosθ=ab^=ab|b|LARGE renewcommand{arraystretch}{2} start{array} hline start{aligned} |vec{a}|costheta &= vec{a} cdot hat{b} &= frac{vec{a} cdot vec{b}}{|vec{b}|} finish{aligned} hline finish{array}


We apply the identical rotation trick another time, now with two normal vectors: alargevec{a} and blargevec{b}.

After rotation:

a=(|a|cosθ, |a|sinθ)Giant vec{a} = (|vec{a}|costheta, |vec{a}|sintheta) ,

b=(|b|, 0)Giant vec{b} = (|vec{b}|, 0)

so:

ab=|a|cosθ|b|+|a|sinθ0=|a||b|cosθGiant start{aligned} vec{a} cdot vec{b} = |vec{a}|costheta cdot |vec{b}| + |vec{a}|sintheta cdot 0 = |vec{a}||vec{b}|costheta finish{aligned}

The dot product of 𝒂giant boldsymbol{vec{a}} and 𝒃giant boldsymbol{vec{b}} is:

ab=a1b1++anbn=i=1naibi=|a||b|cosθGiant renewcommand{arraystretch}{2} start{array}l hline vec{a} cdot vec{b} = a_1 b_1+ dots + a_n b_n = sum_{i=1}^{n} a_i b_i = |vec{a}||vec{b}|costheta hline finish{array}


Vector projection extracts the portion of vector 𝒂giant boldsymbol{vec{a}} that factors alongside the path of vector 𝒃giant boldsymbol{vec{b}}.

The Path Analogy

Think about two trails ranging from the identical level (the origin):

  • Path A results in a whale-watching spot.
  • Path B leads alongside the coast in a unique path.

Right here’s the query projection solutions:

You’re solely allowed to stroll alongside Path B. How far do you have to stroll in order that you find yourself as shut as potential to the endpoint of Path A?

You stroll alongside B, and sooner or later, you cease. From the place you stopped, you look towards the tip of Path A, and the road connecting you to it kinds an ideal 90° angle with Path B. That’s the important thing geometric reality – the closest level is all the time the place you’d make a right-angle flip.

The spot the place you cease on Path B is the projection of A onto B. It represents “the a part of A that goes in B’s path.

The remaining hole -  out of your stopping level to the precise finish of Path A  –  is all the pieces about A that has nothing to do with B’s path. This instance is illustrated in Determine 5 beneath: The vector that begins on the origin, factors alongside Path B, and ends on the closest level is the vector projection of alargevec{a} onto blargevec{b} .

Determine 5 — Vector projection because the closest level to a path.
 Strolling alongside path B, the closest level to the endpoint of A happens the place the connecting phase kinds a proper angle with B. This level is the projection of A onto B. Picture by Creator (created utilizing Claude)..

Scalar projection solutions: “How far did you stroll?”

That’s only a distance, a single quantity.

Vector projection solutions: “The place precisely are you?”

Extra exactly: “What’s the precise motion alongside Path B that will get you to that closest level?”

Now “1.5 kilometers” isn’t sufficient, you must say “1.5 kilometers east alongside the coast.” That’s a distance plus a path: an arrow, not only a quantity. The arrow begins on the origin, factors alongside Path B, and ends on the closest level.

The gap you walked is the scalar projection worth. The magnitude of the vector projection equals absolutely the worth of the scalar projection.

Unit vector  solutions : “Which path does Path B go?”

It’s precisely what b^largehat{b} represents. It’s Path B stripped of any size info  - simply the pure path of the coast.

vector projection=(how far you stroll)scalar projection×(B path)b^start{aligned} &textual content{vector projection} = &underbrace{(textual content{how far you stroll})}_{textual content{scalar projection}} occasions underbrace{(textual content{B path})}_{hat{b}} finish{aligned}

I do know the whale analog may be very particular; it was impressed by this good rationalization (Michael.P, 2014)

Determine 6 beneath reveals the identical shadow diagram as in Determine 4, with PR drawn as an arrow, as a result of the vector projection is a vector (with each size and path), not only a quantity.

Determine 6 — Vector projection as a directional shadow.
 In contrast to scalar projection (a size), the vector projection is an arrow alongside vector b. Picture by Creator (created utilizing Claude).

For the reason that projection should lie alongside blargevec{b} , we’d like two issues for PRlargevec{PR} :

  1. Its magnitude is the scalar projection: |a|cosθgiant|vec{a}|costheta
  2. Its path is: b^largehat{b} (the path of blargevec{b})

Any vector equals its magnitude occasions its path (as we noticed within the Unit Vector part), so:

PR=|a|cosθscalar projectionb^path of bgiant start{array} hline hspace{10pt} vec{PR} = underbrace{|vec{a}| cos theta}_{textual content{scalar projection}} cdot underbrace{hat{b}}_{textual content{path of } vec{b}} hspace{20pt} hline finish{array}

That is already the vector projection formulation. We are able to rewrite it by substituting b^=b|b|largehat{b} = frac{vec{b}}{|vec{b}|} , and recognizing that |a||b|cosθ=abgiant|vec{a}||vec{b}|costheta = vec{a} cdot vec{b}

The vector projection of 𝒂giant boldsymbol{vec{a}} within the path of 𝒃giant boldsymbol{vec{b}} is:

projb(a)=(|a|cosθ)b^=(ab|b|2)b=(ab^)b^Giant renewcommand{arraystretch}{1.5} start{array} hline start{aligned} textual content{proj}_{vec{b}}(vec{a}) &= (|vec{a}|costheta)hat{b} &= left(frac{vec{a} cdot vec{b}}{|vec{b}|^2}proper)vec{b} &= (vec{a} cdot hat{b})hat{b} finish{aligned} hline finish{array}


  • A unit vector isolates a vector’s path by stripping away its magnitude.

𝐯^=𝐯|𝐯|LARGE start{array} hline mathbf{hat{v}} = frac{mathbf{vec{v}}}{|mathbf{vec{v}}|} hline finish{array}

  • The dot product multiplies corresponding parts and sums them. It is usually equal to the product of the magnitudes of the 2 vectors multiplied by the cosine of the angle between them.

 ab=a1b1++anbn=i=1naibi=|a||b|cosθ renewcommand{arraystretch}{2} start{array}l hline vec{a} cdot vec{b} = a_1 b_1+ dots + a_n b_n = sum_{i=1}^{n} a_i b_i = |vec{a}||vec{b}|costheta hline finish{array}

  • Scalar projection makes use of the dot product to measure how far one vector reaches alongside one other’s path - a single quantity, just like the size of a shadow

|a|cosθ=ab^=ab|b|Giant start{array} hline |vec{a}|costheta = vec{a} cdot hat{b} = frac{vec{a} cdot vec{b}}{|vec{b}|} hline finish{array}

  • Vector projection goes one step additional, returning an precise arrow alongside that path: the scalar projection occasions the unit vector.

(|a|cosθ)b^=(ab^)b^Giant renewcommand{arraystretch}{2} start{array}l hline (|vec{a}|costheta)hat{b} = (vec{a} cdot hat{b})hat{b} hline finish{array}

Within the subsequent half, we’ll use the instruments we realized on this article to actually perceive the dot product.

Related Articles

Latest Articles