def loadChains(self, root, files_or_samples, weights=None, loglikes=None, ignore_lines=None): """ Loads chains from files. :param root: Root name :param files_or_samples: list of file names or list of arrays of samples, or single array of samples :param weights: if loading from arrays of samples, corresponding list of arrays of weights :param loglikes: if loading from arrays of samples, corresponding list of arrays of -2 log(likelihood) :param ignore_lines: Amount of lines at the start of the file to ignore, None if should not ignore :return: True if loaded successfully, False if none loaded """ self.chains = [] self.samples = None self.weights = None self.loglikes = None if ignore_lines is None: ignore_lines = self.ignore_lines WSkwargs = {"ignore_rows": ignore_lines, "min_weight_ratio": self.min_weight_ratio} if isinstance(files_or_samples, six.string_types) or isinstance(files_or_samples[0], six.string_types): # From files if weights is not None or loglikes is not None: raise ValueError('weights and loglikes not needed reading from file') if isinstance(files_or_samples, six.string_types): files_or_samples = [files_or_samples] self.name_tag = self.name_tag or os.path.basename(root) for fname in files_or_samples: if print_load_details: print(fname) self.chains.append(WeightedSamples(fname, **WSkwargs)) nchains = len(self.chains) if not nchains: raise WeightedSampleError('loadChains - no chains found for ' + root) else: # From arrays dim = array_dimension(files_or_samples) if dim in [1, 2]: self.setSamples(slice_or_none(files_or_samples, ignore_lines), slice_or_none(weights, ignore_lines), slice_or_none(loglikes, ignore_lines), self.min_weight_ratio) if self.paramNames is None: self.paramNames = ParamNames(default=self.n) nchains = 1 elif dim == 3: for i, samples_i in enumerate(files_or_samples): self.chains.append(WeightedSamples( samples=samples_i, loglikes=None if loglikes is None else np.atleast_2d(loglikes)[i], weights=None if weights is None else np.atleast_2d(weights)[i], **WSkwargs)) if self.paramNames is None: self.paramNames = ParamNames(default=self.chains[0].n) nchains = len(self.chains) else: raise ValueError('samples or files must be array of samples, or a list of arrays or files') self._weightsChanged() return nchains > 0
def __init__(self, means, covs, weights=None, lims=None, names=None, label='', labels=None): """ :param means: list of means for each Gaussian in the mixture :param covs: list of covariances for the Gaussians in the mixture :param weights: optional weight for each component (defaults to equal weight) :param lims: optional list of hard limits for each parameter, [[x1min,x1max], [x2min,x2max]]; use None for no limit :param names: list of names (strings) for each parameter. If not set, set to "param1", "param2"... :param label: name for labelling this mixture :param labels: list of latex labels for each parameter. If not set, defaults to p_{1}, p_{2}... """ self.means = np.asarray(means) self.dim = self.means.shape[1] self.covs = [np.array(cov) for cov in covs] self.invcovs = [np.linalg.inv(cov) for cov in self.covs] if weights is None: weights = [1. / len(means)] * len(means) self.weights = np.array(weights, dtype=np.float64) if np.sum(self.weights) <= 0: raise ValueError('Weight <= 0 in MixtureND') self.weights /= np.sum(weights) self.norms = (2 * np.pi) ** (0.5 * self.dim) * np.array([np.sqrt(np.linalg.det(cov)) for cov in self.covs]) self.lims = lims self.paramNames = ParamNames(names=names, default=self.dim, labels=labels) self.names = self.paramNames.list() self.label = label self.total_mean = np.atleast_1d(np.dot(self.weights, self.means)) self.total_cov = np.zeros((self.dim, self.dim)) for mean, cov, weight, totmean in zip(self.means, self.covs, self.weights, self.total_mean): self.total_cov += weight * (cov + np.outer(mean - totmean, mean - totmean))
def loadChains(self, root, files, ignore_lines=None): """ Loads chains from files. :param root: Root name :param files: list of file names :param ignore_lines: Amount of lines at the start of the file to ignore, None if should not ignore :return: True if loaded successfully, False if none loaded """ self.chains = [] self.samples = None self.weights = None self.loglikes = None self.name_tag = self.name_tag or os.path.basename(root) for fname in files: if print_load_details: print(fname) self.chains.append( WeightedSamples(fname, ignore_lines or self.ignore_lines, min_weight_ratio=self.min_weight_ratio)) if len(self.chains) == 0: raise WeightedSampleError('loadChains - no chains found for ' + root) if self.paramNames is None: self.paramNames = ParamNames(default=self.chains[0].n) self._weightsChanged() return len(self.chains) > 0
def setParamNames(self, names=None): """ Sets the names of the params. :param names: Either a :class:`~.paramnames.ParamNames` object, the name of a .paramnames file to load, a list of name strings, otherwise use default names (param1, param2...). """ self.paramNames = None if isinstance(names, ParamNames): self.paramNames = names elif isinstance(names, six.string_types): self.paramNames = ParamNames(names) elif names is not None: self.paramNames = ParamNames(names=names) elif self.samples is not None: self.paramNames = ParamNames(default=self.n) if self.paramNames: self._getParamIndices()