def alleviate_conditioning_in_coordinates(self, condition=1e8):
"""pass scaling from `C` to `sigma_vec`.
As a result, `C` is a correlation matrix, i.e., all diagonal
entries of `C` are `1`.
"""
if max(self.dC) / min(self.dC) > condition:
# allows for much larger condition numbers, if axis-parallel
if hasattr(self, 'sm') and isinstance(self.sm, sampler.GaussFullSampler):
old_coordinate_condition = max(self.dC) / min(self.dC)
old_condition = self.sm.condition_number
factors = self.sm.to_correlation_matrix()
self.sigma_vec *= factors
self.pc /= factors
self._updateBDfromSM(self.sm)
utils.print_message('\ncondition in coordinate system exceeded'
' %.1e, rescaled to %.1e, '
'\ncondition changed from %.1e to %.1e'
% (old_coordinate_condition, max(self.dC) / min(self.dC),
old_condition, self.sm.condition_number),
iteration=self.countiter)
评论列表
文章目录