Calculate the numeric gradient of successive elements. Contains simplified versions of numpy.gradient and numpy.diff.

### diff1d

`(diff1d data & [options])`

Returns a lazy reader of each successive element minus the previous element of length input-len - 1 unless the `:prepend` option is used.

Options:

• `:prepend` - prepend a value to the returned sequence making it the same length as the passed in sequence.
• `:append` - append a value to the end of the returned sequence making it the same length as the passsed in sequence.

Examples:

``````user> (dt-grad/diff1d [1 2 4 7 0])
[1 2 3 -7]
[1 1 -10]
user> (dt-grad/diff1d [1 2 4] {:prepend 2})
[2 1 2]
[1 2]
``````

### downsample

`(downsample data n-elems)``(downsample data n-elems window-fn)`

Downsample to n-elems using nearest algorithm. If data is less than n-elems it is returned unchanged.

`(gradient1d data dx)``(gradient1d data)`

Implement gradient as `(f(x+1)-f(x-1))/2*dx`. At the boundaries use `(f(x)-f(x-1))/dx`. Returns a lazy representation, use clone to realize.

Calculates the gradient inline returning a double reader. For datetime types please convert to epoch-milliseconds first and the result will be in milliseconds.

dx is a non-zero floating-point scalar and defaults to 1, representing the signed offset between successive sample points.

Returns a double reader of the same length as data.

Example:

``````user> (require '[tech.v3.datatype.gradient :as dt-grad])
nil