How to find angle between 2 vector using python, preferably numpy or scipy; in terms of components of rotation about x,y,z axes?
For example in the code below, utilizing this, we can find the angle between 2 vectors.
import numpy as np
a = np.array([5,7,5])-np.array([1,2,3])
b = np.array([3.25842, 8.14983, 4.44192])-np.array([1,2,3])
def angle(v1, v2, acute):
angle = np.arccos(np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)))
if (acute == True):
return angle
else:
return 2 * np.pi - angle
print(np.rad2deg(angle(v1=a, v2=b, acute=True)))
# returns: 18.531657948873978
Desired angles are alpha_ x,y,z components.

I would suggest using the SciPy Rotation API.
If you have two vectors, you can find the rotation between them with
Rotation.align_vectors(). SciPy then gives you six choices for how to represent the rotation. (See the documentation, and the six methods beginning withas_, for a list of which output formats you can use.)The one which seems most similar to your question is Euler angles.
Example:
Output:
Notes:
as_euler()accepts an order of angles, and doing the rotations in a different order can give different results. I recommend reading the Wikipedia page to understand why.as_euler()gives you a choice between intrinsic and extrinsic rotation angles. Userot.as_euler('xyz', degrees=True)for extrinsic angles.align_vectors()represents distance between vectors after the rotation. See docs for more.