Source code for pyrfu.pyrf.pvi
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 3rd party imports
import numpy as np
import xarray as xr
__author__ = "Louis Richard"
__email__ = "louisr@irfu.se"
__copyright__ = "Copyright 2020-2023"
__license__ = "MIT"
__version__ = "2.4.2"
__status__ = "Prototype"
[docs]def pvi(inp, scale: int = 10):
r"""Returns the PVI of a time series.
.. math::
y = \frac{|x_i - x_{i+s}|^2}{<|x_i - x_{i+s}|^2>}
where :math:`s` is the scale.
Parameters
----------
inp : xarray.DataArray
Input time series.
scale : int, Optional
Scale at which to compute the PVI. Default is 10.
Returns
-------
values : xarray.DataArray
An xarray containing the pvi of the original time series.
"""
if len(inp.data.shape) == 1:
data = inp.data[:, np.newaxis]
else:
data = inp.data
delta_inp = np.abs((data[scale:, :] - data[:-scale, :]))
delta_inp2 = np.sum(delta_inp**2, axis=1)
sigma = np.mean(delta_inp2)
result = np.array(delta_inp2 / sigma)
time = inp.coords[inp.dims[0]].data
result = xr.DataArray(
result,
coords=[time[0 : len(delta_inp)]],
dims=[inp.dims[0]],
attrs=inp.attrs,
)
result.attrs["units"] = "dimensionless"
return result