From a5afdea51e75cafe76191fe7dea94e04aa1d3272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=BChle=2C=20Laura=20Christine=20=28lakue103=29?= <laura.kuehle@uni-duesseldorf.de> Date: Sun, 9 Oct 2022 02:17:04 +0200 Subject: [PATCH] Vectorized '_build_basis_matrix()' in OrthonormalLegendre basis. --- scripts/tcd/Basis_Function.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/scripts/tcd/Basis_Function.py b/scripts/tcd/Basis_Function.py index 35701b0..ef334a9 100644 --- a/scripts/tcd/Basis_Function.py +++ b/scripts/tcd/Basis_Function.py @@ -403,16 +403,15 @@ class OrthonormalLegendre(Legendre): Matrix containing the integral of basis products. """ - matrix = [] - for i in range(self._polynomial_degree + 1): - row = [] - for j in range(self._polynomial_degree + 1): - entry = integrate(self.basis[i].subs(x, first_param) - * self.basis[j].subs(x, second_param), - (z, -1, 1)) - row.append(np.float64(entry)) - matrix.append(row) - return np.array(matrix) + basis_row = np.array([self.basis[idx].subs(x, first_param) for idx in + range(self._polynomial_degree+1)])[: np.newaxis] + basis_col = np.array([self.basis[idx].subs(x, second_param) for idx in + range(self._polynomial_degree+1)])[: np.newaxis] + basis_matrix = np.matmul(basis_row[:, np.newaxis], + basis_col[:, np.newaxis].T) + basis_matrix = np.float64(np.vectorize( + lambda y: integrate(y, (z, -1, 1)))(basis_matrix)) + return basis_matrix @property @cache -- GitLab