[Numpy-discussion] Piecewise functions.

Gerard Vermeulen gerard.vermeulen at grenoble.cnrs.fr
Fri Sep 23 01:55:46 CDT 2005


On Thu, 22 Sep 2005 17:44:59 +0200
Andrea Riciputi <ariciputi at pito.com> wrote:

> Hi all,
> this is probably an already discussed problem, but I've not been able  
> to find a solution even after googling a lot.
> 
> I've a piecewise defined function:
> 
>         /
>         | f1(x)    if x <= a
> f(x) = |
>         | f2(x)    if x > a
>         \
> 
> where f1 and f2 are not defined outside the above range. How can I  
> define such a function in Python in order to apply (map) it to an  
> array ranging from values smaller to values bigger than a?
> 
This does maybe what you want:

from scipy import *

def f(x):
    """Approximative implementation of:
    -1/(x-pi) for x < pi
    1/(x-pi) for x > pi
    """
    result = zeros(len(x), x.typecode())
    i = argmin(abs(x-pi))
    # you may have to tweak i here, because it may be off by 1
    result[:i+1] = -1/(x[:i+1]-pi)
    result[i+1:] = 1/(x[i+1:]-pi)
    return result

x = arange(0, 10, 1, Float)
print f(x)
print abs(1/(x-pi))

Gerard




More information about the Numpy-discussion mailing list