From 989a8a17e6aa6256e1501256f86ad3a330aae800 Mon Sep 17 00:00:00 2001 From: David Luevano Alvarado <55825613+luevano@users.noreply.github.com> Date: Mon, 9 Mar 2020 21:06:23 -0700 Subject: CM O(n^2) to O(n(n/2+1)) --- ml_exp/representations.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ml_exp/representations.py b/ml_exp/representations.py index be567d67a..761e263d4 100644 --- a/ml_exp/representations.py +++ b/ml_exp/representations.py @@ -56,14 +56,15 @@ size. Arrays are not of the right shape.') cm = np.zeros((size, size), dtype=np.float64) # Actual calculation of the coulomb matrix. - for i, xyz_i in enumerate(coords): - for j, xyz_j in enumerate(coords): - rv = xyz_i - xyz_j - r = np.linalg.norm(rv)/cr - if i == j: - cm[i, j] = (0.5*nc[i]**2.4) + for i in range(n): + for j in range(i, n): + if i==j: + cm[i, i] = 0.5*nc[i]**2.4 else: + rv = coords[i] - coords[j] + r = np.linalg.norm(rv)/cr cm[i, j] = nc[i]*nc[j]/r + cm[j, i] = cm[i, j] # Now the value will be returned. if as_eig: -- cgit v1.2.3-70-g09d2