<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Thanks so much Juan!<div class="">I did not know about this np.digitize command.</div><div class="">With this the vectorization of my function then reads as</div><div class=""><br class=""></div><div class=""><div class="">def ZeroOrderInterpolation(t,table):</div><div class="">  import numpy as np</div><div class="">  lookup, values = table[:, 0], table[:, 1:]</div><div class="">  values = np.concatenate((values[0:1], values), axis=0)</div><div class="">  indices = np.digitize(t, lookup)</div><div class="">  return values[indices]</div><div class=""><br class=""></div><div class="">Hugs!</div><div class="">Seth</div><div><br class=""><blockquote type="cite" class=""><div class="">On Oct 16, 2017, at 4:29 AM, Juan Nunez-Iglesias <<a href="mailto:jni.soma@gmail.com" class="">jni.soma@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">

<title class=""></title>

<div class="">
<div name="messageBodySection" style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;" class="">Hi Seth,
<div class=""><br class=""></div>
<div class="">The function you’re looking for is `np.digitize`:</div>
<div class=""><br class=""></div>
<div class=""><br class=""></div>
<div class="">
<div class="">In [1]: t = np.array([0.5,1,1.5,2.5,3,10])</div>
<div class="">   ...: table = np.array([[0,3],[1,0],[2,5],[3,-1]])</div>
<div class="">   ...:</div>
<div class="">In [2]: lookup, values = table[:, 0], table[:, 1:]</div>
<div class="">In [3]: values = np.concatenate((values[0:1], values), axis=0)</div>
<div class="">In [4]: indices = np.digitize(t, lookup)</div>
<div class="">In [5]: values[indices]</div>
<div class="">Out[5]:</div>
<div class="">array([[ 3],</div>
<div class="">       [ 0],</div>
<div class="">       [ 0],</div>
<div class="">       [ 5],</div>
<div class="">       [-1],</div>
<div class="">       [-1]])</div>
</div>
<div class=""><br class=""></div>
<div class=""><br class=""></div>
<div class="">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 class=""><br class=""></div>
<div class="">Hope this helps!</div>
<div class=""><br class=""></div>
<div class="">Juan.</div>
</div>
<div name="messageReplySection" style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;" class=""><br class="">
On 16 Oct 2017, 1:17 PM +1100, Seth Ghandi <<a href="mailto:seth.ghandi.2017@gmail.com" class="">seth.ghandi.2017@gmail.com</a>>, wrote:<br class="">
<blockquote type="cite" style="margin: 5px 5px; padding-left: 10px; border-left: thin solid #1abc9c;" class="">Hi everybody,<br class="">
<br class="">
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 class="">
a[n,1:] if a[n,0] <= t[i], and<br class="">
a[k,1:] if k < n and a[k,0] <= t[i] < a[k+1,0].<br class="">
Note that t[0] is assumed to be at least equal to a[0,0].<br class="">
<br class="">
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 class="">
<br class="">
def ZeroOrderInterpolation(t,a):<br class="">
import numpy as np<br class="">
p = t.shape[0]<br class="">
n, m = a.shape<br class="">
if n == 1:<br class="">
return a[0,1:]<br class="">
y = np.zeros((p,m-1))<br class="">
for i in range(p):<br class="">
if a[n-1,0] <= t[i]:<br class="">
y[i] = a[n-1,1:]<br class="">
else:<br class="">
for j in range(n-1):<br class="">
if (a[j,0] <= t[i]) and (t[i] <= a[j+1,0]):<br class="">
y[i] = a[j,1:]<br class="">
return y<br class="">
<br class="">
import numpy as np<br class="">
t = np.array([0.5,1,1.5,2.5,3,10])<br class="">
table = np.array([[0,3],[1,0],[2,5],[3,-1]])<br class="">
ZeroOrderInterpolation(t,table)<br class="">
<br class="">
[Out]: array([[ 3.],<br class="">
[ 0.],<br class="">
[ 0.],<br class="">
[ 5.],<br class="">
[-1.],<br class="">
[-1.]])<br class="">
<br class="">
<br class="">
Any help for a vectorization "à la numpy" of this fucntion will be apprecaited.<br class="">
<br class="">
Best regards,<br class="">
_______________________________________________<br class="">
NumPy-Discussion mailing list<br class="">
<a href="mailto:NumPy-Discussion@python.org" class="">NumPy-Discussion@python.org</a><br class="">
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" class="">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br class=""></blockquote>
<div class=""></div>
</div>
</div>

_______________________________________________<br class="">NumPy-Discussion mailing list<br class=""><a href="mailto:NumPy-Discussion@python.org" class="">NumPy-Discussion@python.org</a><br class="">https://mail.python.org/mailman/listinfo/numpy-discussion<br class=""></div></blockquote></div><br class=""></div></body></html>