# Vector projection using Python

| | |
A vector is a geometric object that has both size (i.e. length) and direction. A vector is generally represented by a line segment with a specific direction connecting the starting point A and the ending point B, as shown in the following figure, and is denoted as \$overrightarrow{AB}\$

## Projection of a Vector on another vector

### Computing vector projection onto another vector in Python:

```# import numpy to perform operations on vector
import numpy as np

u = np.array([1, 2, 3])   # vector u
v = np.array([5, 6, 2])   # vector v:

# Task: Project vector u on vector v

# finding norm of the vector v
v_norm = np. sqrt(sum(v**2))

# Apply the formula as mentioned above
# for projecting a vector onto another vector
# find dot product using np.dot()
proj_of_u_on_v = (np.dot(u, v)/v_norm**2)*v

print("Projection of Vector u on Vector v is: ", proj_of_u_on_v)
```

### Output:

```Projection of Vector u on Vector v is:  [1.76923077 2.12307692 0.70769231]
```

One liner code for projecting a vector onto another vector:

```(np.dot(u, v)/np.dot(v, v))*v
```

## Projection of a Vector onto a Plane

### Computing vector projection onto a Plane in Python:

```# import numpy to perform operations on vector
import numpy as np

# vector u
u = np.array([2, 5, 8])

# vector n: n is orthogonal vector to Plane P
n = np.array([1, 1, 7])

# Task: Project vector u on Plane P

# finding norm of the vector n
n_norm = np. sqrt(sum(n**2))

# Apply the formula as mentioned above
# for projecting a vector onto the orthogonal vector n
# find dot product using np.dot()
proj_of_u_on_n = (np.dot(u, n)/n_norm**2)*n

# subtract proj_of_u_on_n from u:
# this is the projection of u on Plane P
print("Projection of Vector u on Plane P is: ", u - proj_of_u_on_n)
```

### Output:

```Projection of Vector u on Plane P is:  [ 0.76470588  3.76470588 -0.64705]
```

## How to use Python to calculate Vector Projection?

### Question from StackOverFlow

Is there an easier command to compute vector projection? I am instead using the following:

``````x = np.array([ 3, -4,  0])
y = np.array([10,  5, -6])
z=float(np.dot(x, y))
z1=float(np.dot(x, x))
z2=np. sqrt(z1)
z3=(z/z2**2)
x*z3
``````

Maybe this is what you really want:

``````np.dot(x, y) / np.linalg.norm(y)
``````

This should give the projection of vector `x` onto vector `y` - see https://en.wikipedia.org/wiki/Vector_projection. Alternatively, if you want to compute the projection of `y` onto `x`, then replace `y` with `x` in the denominator (`norm`) of the above equation.

EDIT: As @VaidAbhishek commented, the above formula is for the scalar projection. To obtain vector projection multiply scalar projection by a unit vector in the direction of the vector onto which the first vector is projected. The formula then can be modified as:

``````y * np.dot(x, y) / np.dot(y, y)
``````

for the vector projection of `x` onto `y`.

## Shop Learn programming in R: courses

\$ Best Python online courses for 2022

\$ Best laptop for Fortnite

\$ Best laptop for Excel

\$ Best laptop for Solidworks

\$ Best laptop for Roblox

\$ Best computer for crypto mining

\$ Best laptop for Sims 4

\$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

NUMPYNUMPY

How to convert Nonetype to int or string?

NUMPYNUMPY

How to specify multiple return types using type-hints

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

## Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method