From e5c949c7b17deca6ded8e366667d2f43f96bec7b Mon Sep 17 00:00:00 2001 From: Henriette Sudhaus Date: Fri, 25 Sep 2020 21:48:28 +0200 Subject: [PATCH 1/2] src/scene.py: Scene.displacement_px_var gets saved and loaded src/scene.py: Scene.displacement_px_var use fixed for Covariance Matrix --- src/quadtree.py | 29 ++++++++++++++++++++++++++++- src/scene.py | 25 +++++++++++++++++++------ 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/quadtree.py b/src/quadtree.py index e0a82f0..8067d88 100644 --- a/src/quadtree.py +++ b/src/quadtree.py @@ -84,13 +84,29 @@ def var(self): @property_cached def mean_px_var(self): - """ Variance of displacement + """ Mean pixel variance of displacement in leaf :type: float """ if self.displacement_px_var is not None: return float(num.nanmean(self.displacement_px_var)) + + return None + + @property_cached + def mat_mean_px_var(self): + """ Mean matrix pixel variance in leaf + + Mean value of Matrix with pixel variance in + :type: float + """ + if self.displacement_px_var is not None: + nvalid_leaf = num.sum(num.isfinite(self.displacement_px_var)) + nmat = nvalid_leaf * nvalid_leaf + return float(num.nansum(self.displacement_px_var)/nmat) + return None + @property_cached def corr_median(self): """ Standard deviation of node's displacement corrected for median @@ -760,6 +776,17 @@ def leaf_mean_px_var(self): if self.scene.displacement_px_var is not None: return num.array([lf.mean_px_var for lf in self.leaves]) return None + + @property + def leaf_mat_mean_px_var(self): + """ + :getter: Mean pixel variance in each quadtree, + if :attr:`kite.Scene.displacement_px_var` is set. + :type: :class:`numpy.ndarray`, size ``N``. + """ + if self.scene.displacement_px_var is not None: + return num.array([lf.mat_mean_px_var for lf in self.leaves]) + return None @property_cached def leaf_means(self): diff --git a/src/scene.py b/src/scene.py index 8a90642..9508a83 100644 --- a/src/scene.py +++ b/src/scene.py @@ -920,7 +920,7 @@ def save(self, filename=None): _file, ext = op.splitext(filename) filename = _file if ext in ['.yml', '.npz'] else filename - components = ['_displacement', 'theta', 'phi'] + components = ['_displacement', 'theta', 'phi', 'displacement_px_var'] self._log.debug('Saving scene data to %s.npz' % filename) num.savez('%s.npz' % (filename), @@ -953,9 +953,13 @@ def load(cls, filename): try: data = num.load('%s.npz' % basename) + print(num.shape(data)) displacement = data['arr_0'] theta = data['arr_1'] phi = data['arr_2'] + if num.shape(data)[0]>3: + displacement_px_var = data['arr_3'] + except IOError: raise UserIOWarning('Could not load data from %s.npz' % basename) @@ -965,11 +969,20 @@ def load(cls, filename): except IOError: raise UserIOWarning('Could not load %s.yml' % basename) - scene = cls( - displacement=displacement, - theta=theta, - phi=phi, - config=config) + if num.shape(data)[0]>3: + scene = cls( + displacement=displacement, + theta=theta, + phi=phi, + displacement_px_var = displacement_px_var, + config=config) + else: + scene = cls( + displacement=displacement, + theta=theta, + phi=phi, + config=config) + scene._log.debug('Loading from %s[.npz,.yml]', basename) scene.meta.filename = filename From c565a35cf7a394578c5568d9352198404472684e Mon Sep 17 00:00:00 2001 From: Henriette Sudhaus Date: Sat, 26 Sep 2020 14:03:56 +0200 Subject: [PATCH 2/2] src/covariance.py: fix small errors src/quadtree.py: fix small errors --- src/covariance.py | 4 ++-- src/quadtree.py | 5 ++++- src/scene.py | 1 - 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/covariance.py b/src/covariance.py index 5a2791f..8bc34a3 100644 --- a/src/covariance.py +++ b/src/covariance.py @@ -547,11 +547,11 @@ def _calcCovarianceMatrix(self, method='focal', nthreads=None): self.config.adaptive_subsampling)\ .reshape(nleaves, nleaves) - if self.quadtree.leaf_mean_px_var is not None: + if self.quadtree.leaf_mat_mean_px_var is not None: self._log.debug( 'Adding variance from scene.displacement_px_var') cov_matrix[num.diag_indices_from(cov_matrix)] +=\ - self.quadtree.leaf_mean_px_var + self.quadtree.leaf_mat_mean_px_var else: raise TypeError('Covariance calculation %s method not defined!' diff --git a/src/quadtree.py b/src/quadtree.py index 8067d88..39458c7 100644 --- a/src/quadtree.py +++ b/src/quadtree.py @@ -102,7 +102,10 @@ def mat_mean_px_var(self): if self.displacement_px_var is not None: nvalid_leaf = num.sum(num.isfinite(self.displacement_px_var)) nmat = nvalid_leaf * nvalid_leaf - return float(num.nansum(self.displacement_px_var)/nmat) + if nmat>0.: + return float(num.nansum(self.displacement_px_var)/nmat) + else: + return float(0.) return None diff --git a/src/scene.py b/src/scene.py index 9508a83..8e32bab 100644 --- a/src/scene.py +++ b/src/scene.py @@ -953,7 +953,6 @@ def load(cls, filename): try: data = num.load('%s.npz' % basename) - print(num.shape(data)) displacement = data['arr_0'] theta = data['arr_1'] phi = data['arr_2']