<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div name="messageBodySection" style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;">Hi Seth,
<div><br /></div>
<div>The function you’re looking for is `np.digitize`:</div>
<div><br /></div>
<div><br /></div>
<div>
<div>In [1]: t = np.array([0.5,1,1.5,2.5,3,10])</div>
<div>   ...: table = np.array([[0,3],[1,0],[2,5],[3,-1]])</div>
<div>   ...:</div>
<div>In [2]: lookup, values = table[:, 0], table[:, 1:]</div>
<div>In [3]: values = np.concatenate((values[0:1], values), axis=0)</div>
<div>In [4]: indices = np.digitize(t, lookup)</div>
<div>In [5]: values[indices]</div>
<div>Out[5]:</div>
<div>array([[ 3],</div>
<div>       [ 0],</div>
<div>       [ 0],</div>
<div>       [ 5],</div>
<div>       [-1],</div>
<div>       [-1]])</div>
</div>
<div><br /></div>
<div><br /></div>
<div>Note the call to concatenate. Depending on how exactly you want your bins to align, you might need to concatenate at the end or at the start of the `values` array.</div>
<div><br /></div>
<div>Hope this helps!</div>
<div><br /></div>
<div>Juan.</div>
</div>
<div name="messageReplySection" style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;"><br />
On 16 Oct 2017, 1:17 PM +1100, Seth Ghandi <seth.ghandi.2017@gmail.com>, wrote:<br />
<blockquote type="cite" style="margin: 5px 5px; padding-left: 10px; border-left: thin solid #1abc9c;">Hi everybody,<br />
<br />
I am new to newpy and am trying to define a variant of piecewise or zero holder interpolation function, say ZeroOrderInterpolation(t,a), where t is an 1D array of size, say p, consisting of real numbers, and a is a 2D array of size, say nxm, with first column consisting of increasing real numbers. This function should return an array, say y, of size px(m-1) such that y[i,:] is equal to<br />
a[n,1:] if a[n,0] <= t[i], and<br />
a[k,1:] if k < n and a[k,0] <= t[i] < a[k+1,0].<br />
Note that t[0] is assumed to be at least equal to a[0,0].<br />
<br />
I have the following script made of "for loops" and I am trying to vectorize it so as to make it faster for large arrays.<br />
<br />
def ZeroOrderInterpolation(t,a):<br />
import numpy as np<br />
p = t.shape[0]<br />
n, m = a.shape<br />
if n == 1:<br />
return a[0,1:]<br />
y = np.zeros((p,m-1))<br />
for i in range(p):<br />
if a[n-1,0] <= t[i]:<br />
y[i] = a[n-1,1:]<br />
else:<br />
for j in range(n-1):<br />
if (a[j,0] <= t[i]) and (t[i] <= a[j+1,0]):<br />
y[i] = a[j,1:]<br />
return y<br />
<br />
import numpy as np<br />
t = np.array([0.5,1,1.5,2.5,3,10])<br />
table = np.array([[0,3],[1,0],[2,5],[3,-1]])<br />
ZeroOrderInterpolation(t,table)<br />
<br />
[Out]: array([[ 3.],<br />
[ 0.],<br />
[ 0.],<br />
[ 5.],<br />
[-1.],<br />
[-1.]])<br />
<br />
<br />
Any help for a vectorization "à la numpy" of this fucntion will be apprecaited.<br />
<br />
Best regards,<br />
_______________________________________________<br />
NumPy-Discussion mailing list<br />
NumPy-Discussion@python.org<br />
https://mail.python.org/mailman/listinfo/numpy-discussion<br /></blockquote>
<div></div>
</div>
</body>
</html>