Submit
Path:
~
/
/
proc
/
thread-self
/
root
/
opt
/
alt
/
python35
/
lib64
/
python3.5
/
site-packages
/
scipy
/
signal
/
__pycache__
/
File Content:
_savitzky_golay.cpython-35.pyc
�<WW73 � @ s� d d l m Z m Z m Z d d l Z d d l m Z d d l m Z d d l m Z d d l m Z d d d d d d � Z d d � Z d d � Z d d � Z d d d d d d d � Z d S)� )�division�print_function�absolute_importN)�lstsq)� factorial)� convolve1d� )� axis_sliceg �?�convc C so | | k r t d � � t | d � \ } } | d k rE t d � � | d k rW | } d | k on | k n s t d � � | d k r� t d � � t j | | | d t �} | d k r� | d d d � } t j | d � j d d � } | j d k rt j | | d � } n | | } t j | d � } t | � | | | | <t | | � \ } } } } | S)a2 Compute the coefficients for a 1-d Savitzky-Golay FIR filter. Parameters ---------- window_length : int The length of the filter window (i.e. the number of coefficients). `window_length` must be an odd positive integer. polyorder : int The order of the polynomial used to fit the samples. `polyorder` must be less than `window_length`. deriv : int, optional The order of the derivative to compute. This must be a nonnegative integer. The default is 0, which means to filter the data without differentiating. delta : float, optional The spacing of the samples to which the filter will be applied. This is only used if deriv > 0. pos : int or None, optional If pos is not None, it specifies evaluation position within the window. The default is the middle of the window. use : str, optional Either 'conv' or 'dot'. This argument chooses the order of the coefficients. The default is 'conv', which means that the coefficients are ordered to be used in a convolution. With use='dot', the order is reversed, so the filter is applied by dotting the coefficients with the data set. Returns ------- coeffs : 1-d ndarray The filter coefficients. References ---------- A. Savitzky, M. J. E. Golay, Smoothing and Differentiation of Data by Simplified Least Squares Procedures. Analytical Chemistry, 1964, 36 (8), pp 1627-1639. See Also -------- savgol_filter Notes ----- .. versionadded:: 0.14.0 Examples -------- >>> from scipy.signal import savgol_coeffs >>> savgol_coeffs(5, 2) array([-0.08571429, 0.34285714, 0.48571429, 0.34285714, -0.08571429]) >>> savgol_coeffs(5, 2, deriv=1) array([ 2.00000000e-01, 1.00000000e-01, 2.00607895e-16, -1.00000000e-01, -2.00000000e-01]) Note that use='dot' simply reverses the coefficients. >>> savgol_coeffs(5, 2, pos=3) array([ 0.25714286, 0.37142857, 0.34285714, 0.17142857, -0.14285714]) >>> savgol_coeffs(5, 2, pos=3, use='dot') array([-0.14285714, 0.17142857, 0.34285714, 0.37142857, 0.25714286]) `x` contains data from the parabola x = t**2, sampled at t = -1, 0, 1, 2, 3. `c` holds the coefficients that will compute the derivative at the last position. When dotted with `x` the result should be 6. >>> x = np.array([1, 0, 1, 4, 9]) >>> c = savgol_coeffs(5, 2, pos=4, deriv=1, use='dot') >>> c.dot(x) 6.0000000000000018 z*polyorder must be less than window_length.� r zwindow_length must be odd.Nz4pos must be nonnegative and less than window_length.r �dotz`use` must be 'conv' or 'dot'�dtyper )r r ���r )r r )� ValueError�divmod�np�arange�float�reshape�sizeZ atleast_2dZzerosr r )� window_length� polyorder�deriv�delta�posZuse�halflen�rem�x�order�A�y�coeffs�_� r# �/_savitzky_golay.py� savgol_coeffs s, X r% c C s� | d k r | } n� t | � } | | k rO t j | d d � d f � } n� | d | � j � } xb t | � D]T } t j | | d | | d d � } | | j | | f d | j d � 9} qs W| } | S)aE Differentiate polynomials represented with coefficients. p must be a 1D or 2D array. In the 2D case, each column gives the coefficients of a polynomial; the first row holds the coefficients associated with the highest power. m must be a nonnegative integer. (numpy.polyder doesn't handle the 2D case.) r Nr .r )r )�lenr Z zeros_like�copy�ranger r �ndim)�p�m�result�nZdp�k�rngr# r# r$ �_polyder� s "%-r0 c C s� t | d | d | d | �} | d k s: | | j k rI | } d } n | j | d � } d } | j | j d d � } t j t j d | | � | | � } | d k r� t | | � } t j | | | | � } t j | | j d d � � | | } t | j � } | | | d | d <| | <| j | | | d d � � } | r^| j d | � } t | d | d | d | �} | | d <d S)aF Given an n-d array `x` and the specification of a slice of `x` from `window_start` to `window_stop` along `axis`, create an interpolating polynomial of each 1-d slice, and evaluate that polynomial in the slice from `interp_start` to `interp_stop`. Put the result into the corresponding slice of `y`. �start�stop�axisr FTr N.r r )r r) Zswapaxesr �shaper Zpolyfitr r0 Zpolyval�list)r Zwindow_startZwindow_stopZinterp_startZinterp_stopr3 r r r r Zx_edgeZxx_edgeZswappedZpoly_coeffs�i�valuesZshpZy_edger# r# r$ � _fit_edge� s( & r8 c C sm | d } t | d | d | | | | | | � | j | } t | | | | | | | | | | | | � d S)z� Use polynomial interpolation of x at the low and high ends of the axis to fill in the halflen values in y. This function just calls _fit_edge twice, once for each end of the axis. r r N)r8 r4 ) r r r r r r3 r r r- r# r# r$ �_fit_edges_polyfit� s r9 �interpg c C s� | d k r t d � � t j | � } | j t j k r] | j t j k r] | j t j � } t | | d | d | �} | d k r� t | | d | d d �} t | | | | | | | � n! t | | d | d | d | �} | S) aX Apply a Savitzky-Golay filter to an array. This is a 1-d filter. If `x` has dimension greater than 1, `axis` determines the axis along which the filter is applied. Parameters ---------- x : array_like The data to be filtered. If `x` is not a single or double precision floating point array, it will be converted to type `numpy.float64` before filtering. window_length : int The length of the filter window (i.e. the number of coefficients). `window_length` must be a positive odd integer. polyorder : int The order of the polynomial used to fit the samples. `polyorder` must be less than `window_length`. deriv : int, optional The order of the derivative to compute. This must be a nonnegative integer. The default is 0, which means to filter the data without differentiating. delta : float, optional The spacing of the samples to which the filter will be applied. This is only used if deriv > 0. Default is 1.0. axis : int, optional The axis of the array `x` along which the filter is to be applied. Default is -1. mode : str, optional Must be 'mirror', 'constant', 'nearest', 'wrap' or 'interp'. This determines the type of extension to use for the padded signal to which the filter is applied. When `mode` is 'constant', the padding value is given by `cval`. See the Notes for more details on 'mirror', 'constant', 'wrap', and 'nearest'. When the 'interp' mode is selected (the default), no extension is used. Instead, a degree `polyorder` polynomial is fit to the last `window_length` values of the edges, and this polynomial is used to evaluate the last `window_length // 2` output values. cval : scalar, optional Value to fill past the edges of the input if `mode` is 'constant'. Default is 0.0. Returns ------- y : ndarray, same shape as `x` The filtered data. See Also -------- savgol_coeffs Notes ----- Details on the `mode` options: 'mirror': Repeats the values at the edges in reverse order. The value closest to the edge is not included. 'nearest': The extension contains the nearest input value. 'constant': The extension contains the value given by the `cval` argument. 'wrap': The extension contains the values from the other end of the array. For example, if the input is [1, 2, 3, 4, 5, 6, 7, 8], and `window_length` is 7, the following shows the extended data for the various `mode` options (assuming `cval` is 0):: mode | Ext | Input | Ext -----------+---------+------------------------+--------- 'mirror' | 4 3 2 | 1 2 3 4 5 6 7 8 | 7 6 5 'nearest' | 1 1 1 | 1 2 3 4 5 6 7 8 | 8 8 8 'constant' | 0 0 0 | 1 2 3 4 5 6 7 8 | 0 0 0 'wrap' | 6 7 8 | 1 2 3 4 5 6 7 8 | 1 2 3 .. versionadded:: 0.14.0 Examples -------- >>> from scipy.signal import savgol_filter >>> np.set_printoptions(precision=2) # For compact display. >>> x = np.array([2, 2, 5, 2, 1, 0, 1, 4, 9]) Filter with a window length of 5 and a degree 2 polynomial. Use the defaults for all other parameters. >>> savgol_filter(x, 5, 2) array([ 1.66, 3.17, 3.54, 2.86, 0.66, 0.17, 1. , 4. , 9. ]) Note that the last five values in x are samples of a parabola, so when mode='interp' (the default) is used with polyorder=2, the last three values are unchanged. Compare that to, for example, `mode='nearest'`: >>> savgol_filter(x, 5, 2, mode='nearest') array([ 1.74, 3.03, 3.54, 2.86, 0.66, 0.17, 1. , 4.6 , 7.97]) �mirror�constant�nearestr: �wrapz@mode must be 'mirror', 'constant', 'nearest' 'wrap' or 'interp'.r r r3 �mode�cval)r; r<