def solve_Ab(A, b, squeeze=True): AA, bb = make_same_dims(A, b) x = np.linalg.solve(AA, bb) result = hfarray(x, dims=bb.dims) if squeeze: result = result.squeeze() return result
def delay(freq, var): r"""Berakna grupploptid :math:`\tau=-\frac{d\varphi}{d\omega}` for data Invariabler *freq* frekvenser som *var* galler for *var* komplexa data som skall anvandas i berakningen Resultat (f,tau) *f* frekvenserna som motsvarar mittpunkter i *freq* *tau* beraknad grupploptid med hjalp av mittpunkts approximation for derivatan >>> x=hfarray(np.arange(0,10.)) >>> y=hfarray(np.exp(-2j*np.pi*x/10)) >>> f,tau=delay(x,y) >>> f hfarray([ 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5]) >>> tau hfarray([ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]) """ freq, var = make_same_dims(freq, var) f_mean = (freq[:-1] + freq[1:]) / 2 domega = (2 * pi * (freq[:-1] - freq[1:])) dfi = angle(var[1:] / var[:-1]) return (f_mean, dfi / domega)
def matrix_multiply(a, b): """Multiply arrays of matrices. a and b are hfarrays containing dimensions DimMatrix_i and DimMatrix_j. Matrix multiplication is done by broadcasting the other dimensions first. """ A, B = make_same_dims(a, b) res = np.einsum("...ij,...jk->...ik", A, B) return hfarray(res, dims=A.dims)
def test_4(self): a, b = aobj.make_same_dims(self.a, np.array(self.a)) self.assertEqual(a.dims, b.dims) self.assertEqual(a.dims, (ds.DiagAxis("f", 3), ))
def test_3(self): b, a = aobj.make_same_dims(self.b, self.a) self.assertEqual(a.dims, b.dims) self.assertEqual(a.dims, (ds.DiagAxis("f", 3), ds.DiagAxis("p", 3),))
def test_2(self): a, b = aobj.make_same_dims(self.a, self.b) self.assertEqual(a.dims, b.dims) self.assertEqual(a.dims, (ds.DiagAxis("f", 3), ds.DiagAxis("p", 3),))
def test_1(self): a, b = aobj.make_same_dims(self.a, self.a) self.assertEqual(a.dims, b.dims)