PlasmaCalcs.tools.xarray_tools.xarray_sci.xarray_curve_fit
- PlasmaCalcs.tools.xarray_tools.xarray_sci.xarray_curve_fit(array, f, dim, *, stddev=True, werr_samples=1000, werr_seed=0, promote_dims_if_needed=True, pnames=None, pbounds=None, bounds=UNSET, **kw_curve_fit)
- scipy.optimize.curve_fit(f, xdata=array[dim], ydata=array).Except, iterate over all other dims in array.E.g. arr.curve_fit(‘t’, f) for arr with ‘t’ and ‘fluid’ dims–> result reduces ‘t’ dim but retains ‘fluid’ dim.
- array: xarray.DataArray or Dataset
- data to fit.Currently, Dataset allowed only if it has ‘mean’ and ‘std’ data_vars, when
stddev=True,in which case will sample the implied gaussians (via np.random.normal),N=``werr_samples`` times, performing N fits to f,reporting the mean and stddev of each fit param across all N fits, andignoring scipy standard deviation info about params from each individual fit. - dim: str
- dim to fit along.
- f: callable like f(x, param1, param2, …)
- function to fit.
- stddev: bool
- whether to include data_var ‘stddev’ telling standard deviation of the fit.
- werr_samples: int
- number of fits to do if
arrayis a Dataset with ‘mean’ and ‘std’ vars, whenstddev=True,in which case result will tell mean and stddev of each fit param across all N fits,and ignore scipy standard deviation info about params from each individual fit.(Implemented this because default scipy linear least squares fitting with errorbarsjust weights each point’s important by inverse of error bar,which highly favors points with small errors.That default does NOT correspond to the results of “repeating the experiment” N times,where “the experiment” is gathering data then fitting,and then asking “what is the mean and stddev of fit params across all N experiments?”.However, using werr_samples DOES correspond to “repeating the experiment” N times.) - werr_seed: None or any object, default 0
np.random.seed(werr_seed)beforehand, if doing werr_samples (with Datasetarray).Default 0 ensures reproducible results.None –> don’t call np.random.seed beforehand. Will give different results each time.- promote_dims_if_needed: bool
- whether to promote non-dimension coords to dimensions.if False, raise DimensionKeyError if any relevant coord is not already a dimension.
- pnames: None or list of str
- names of params. If provided, ‘param’ coord will be assigned these names.
- pbounds: None or list of [None, callable, or 2-tuple of value, None, or callable]
- bounds for each parameter. Provide
pboundsorbounds, but not both.None –> no bounds provided.Each bound can be:callable –> call as bound(array, dim) (after doing array.pc.ensure_dims(dim)).None –> use (-np.inf, np.inf).2-tuple –> (lower, upper).callable –> use lower(array, dim) / upper(array, dim)None –> use -np.inf / np.inf. - bounds: UNSET or (list of lower bounds, list of upper bounds)
- bounds, formatted as expected by scipy curve_fit.Provide
pboundsorbounds, but not both.
additional kwargs go to scipy.optimize.curve_fit.returns xarray.Dataset with data_vars: