Source code for aerosandbox.numpy.linalg_top_level

import numpy as _onp
import casadi as _cas
from aerosandbox.numpy.determine_type import is_casadi_type


[docs]def dot(a, b, manual=False): """ Dot product of two arrays. See syntax here: https://numpy.org/doc/stable/reference/generated/numpy.dot.html """ if manual: return sum([ai * bi for ai, bi in zip(a, b)]) if not is_casadi_type([a, b], recursive=True): return _onp.dot(a, b) else: return _cas.dot(a, b)
[docs]def cross(a, b, axisa=-1, axisb=-1, axisc=-1, axis=None, manual=False): """ Return the cross product of two (arrays of) vectors. See syntax here: https://numpy.org/doc/stable/reference/generated/numpy.cross.html """ if manual: cross_x = a[1] * b[2] - a[2] * b[1] cross_y = a[2] * b[0] - a[0] * b[2] cross_z = a[0] * b[1] - a[1] * b[0] return cross_x, cross_y, cross_z if not is_casadi_type([a, b], recursive=True): return _onp.cross(a, b, axisa=axisa, axisb=axisb, axisc=axisc, axis=axis) else: if axis is not None: if not ( axis == -1 or axis == 0 or axis == 1 ): raise ValueError("`axis` must be -1, 0, or 1.") axisa = axis axisb = axis axisc = axis if axisa == -1 or axisa == 1: if not is_casadi_type(a): a = _cas.DM(a) a = a.T elif axisa == 0: pass else: raise ValueError("`axisa` must be -1, 0, or 1.") if axisb == -1 or axisb == 1: if not is_casadi_type(b): b = _cas.DM(b) b = b.T elif axisb == 0: pass else: raise ValueError("`axisb` must be -1, 0, or 1.") # Compute the cross product, horizontally (along axis 1 of a 2D array) c = _cas.cross(a, b) if axisc == -1 or axisc == 1: c = c.T elif axisc == 0: pass else: raise ValueError("`axisc` must be -1, 0, or 1.") return c
[docs]def transpose(a, axes=None): """ Reverse or permute the axes of an array; returns the modified array. For an array a with two axes, transpose(a) gives the matrix transpose. See syntax here: https://numpy.org/doc/stable/reference/generated/numpy.transpose.html """ if not is_casadi_type(a, recursive=False): return _onp.transpose(a, axes=axes) else: return _cas.transpose(a)