Change language

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

Answer:

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

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


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