<div dir="ltr"><div><div>Hi all, <br><br></div>I have implemented a proposed 
enhancement for the np.gradient function that allows to compute the 
gradient on non uniform grids. (PR: <a href="https://github.com/numpy/numpy/pull/8446" target="_blank">https://github.com/numpy/<wbr>numpy/pull/8446</a>)<br></div>The proposed implementation has a behaviour/signature is similar to that of Matlab/Octave. As argument it can take:<br>1. A single scalar to specify a sample distance for all dimensions.<br>2. N scalars to specify a constant sample distance for each dimension.<br>   i.e. `dx`, `dy`, `dz`, ...<br>3. N arrays to specify the coordinates of the values along each<br>   dimension of F. The length of the array must match the size of<br>   the corresponding dimension<br>4. Any combination of N scalars/arrays with the meaning of 2. and 3.<br><br>e.g., you can do the following:<br>    <br>    >>> f = np.array([[1, 2, 6], [3, 4, 5]], dtype=np.float)<br>    >>> dx = 2.<br>    >>> y = [1., 1.5, 3.5]<br>    >>> np.gradient(f, dx, y)<br>    [array([[ 1. ,  1. , -0.5], [ 1. ,  1. , -0.5]]), <br>     array([[ 2. ,  2. ,  2. ], [ 2. ,  1.7,  0.5]])]<br clear="all"><div><div><br></div>It should not break any existing code since as of 1.12 only scalars or list of scalars are allowed.<br></div><div>A possible alternative API could be pass arrays of sampling steps instead of the coordinates. <br>On the one hand, this would have the advantage of having "differences" both in the scalar case and in the array case. <br></div><div>On
 the other hand, if you are dealing with non uniformly-spaced data  
(e.g, data is mapped on a grid or it is a time-series), in most cases 
you already have the coordinates/timestamps. Therefore, in the case of 
difference as argument, you would almost always have a call np.diff 
before np.gradient. <br><br>In the end, I would rather prefer the 
coordinates option since IMHO it is more handy, I don't think that would
 be too much "surprising" and it is what Matlab already does. Also, it 
could not easily lead to "silly" mistakes since the length have to match
 the size of the corresponding dimension.<br><br></div><div>What do you think?<br><br></div><div>Thanks<br><br></div>Alessandro<br clear="all"><br>-- <br><div class="gmail_signature"><font size="1">--------------------------------------------------------------------------</font><font size="1"><br>
NOTICE:</font><font size="1"> Dlgs 196/2003 this e-mail and any attachments thereto may contain confidential information and are intended for the sole
 use of the recipient(s) named above.  If you are not the intended 
recipient of this message you are hereby notified that any dissemination
 or copying of this message is strictly prohibited. If you have received
 this e-mail in error, please notify the sender either by telephone or 
by e-mail and delete the material from any computer. Thank you.</font><font size="1"><br>
------------------------------</font><font size="1">------------------------------</font><font size="1">--------------</font></div>
</div>