Interpolation ignoring zero values in array - Python
Question: I have two arrays of the same length

    
    
    x = array([-243., -242., -241., -240., -239., -238., -237., -236., -235.,
           -234., -233., -232., -231., -230., -229., -228., -227., -226.,
           -225., -224., -223., -222., -221., -220., -219., -218., -217.,
           -216., -215., -214., -213., -212., -211., -210., -209., -208.,
           -207., -206., -205., -204., -203., -202., -201., -200., -199.,
           -198., -197., -196., -195., -194., -193., -192., -191., -190.,
           -189., -188., -187., -186., -185., -184., -183., -182., -181.,
           -180., -179., -178., -177., -176., -175., -174., -173., -172.,
           -171., -170., -169., -168., -167., -166., -165., -164., -163.,
           -162., -161., -160., -159., -158., -157., -156., -155., -154.,
           -153., -152., -151., -150., -149., -148., -147., -146., -145.,
           -144., -143., -142., -141., -140., -139., -138., -137., -136.,
           -135., -134., -133., -132., -131., -130., -129., -128., -127.,
           -126., -125., -124., -123., -122., -121., -120., -119., -118.,
           -117., -116., -115., -114., -113., -112., -111., -110., -109.,
           -108., -107., -106., -105., -104., -103., -102., -101., -100.,
            -99.,  -98.,  -97.,  -96.,  -95.,  -94.,  -93.,  -92.,  -91.,
            -90.,  -89.,  -88.,  -87.,  -86.,  -85.,  -84.,  -83.,  -82.,
            -81.,  -80.,  -79.,  -78.,  -77.,  -76.,  -75.,  -74.,  -73.,
            -72.,  -71.,  -70.,  -69.,  -68.,  -67.,  -66.,  -65.,  -64.,
            -63.,  -62.,  -61.,  -60.,  -59.,  -58.,  -57.,  -56.,  -55.,
            -54.,  -53.,  -52.,  -51.,  -50.,  -49.,  -48.,  -47.,  -46.,
            -45.,  -44.,  -43.,  -42.,  -41.,  -40.,  -39.,  -38.,  -37.,
            -36.,  -35.,  -34.,  -33.,  -32.,  -31.,  -30.,  -29.,  -28.,
            -27.,  -26.,  -25.,  -24.,  -23.,  -22.,  -21.,  -20.,  -19.,
            -18.,  -17.,  -16.,  -15.,  -14.,  -13.,  -12.,  -11.,  -10.,
             -9.,   -8.,   -7.,   -6.,   -5.,   -4.,   -3.,   -2.,   -1.,
             -0.,    0.,    1.,    2.,    3.,    4.,    5.,    6.,    7.,
              8.,    9.,   10.,   11.,   12.,   13.,   14.,   15.,   16.,
             17.,   18.,   19.,   20.,   21.,   22.,   23.,   24.,   25.,
             26.,   27.,   28.,   29.,   30.,   31.,   32.,   33.,   34.,
             35.,   36.,   37.,   38.,   39.,   40.,   41.,   42.,   43.,
             44.,   45.,   46.,   47.,   48.,   49.,   50.,   51.,   52.,
             53.,   54.,   55.,   56.,   57.,   58.,   59.,   60.,   61.,
             62.,   63.,   64.,   65.,   66.,   67.,   68.,   69.,   70.,
             71.,   72.,   73.,   74.,   75.,   76.,   77.,   78.,   79.,
             80.,   81.,   82.,   83.,   84.,   85.,   86.,   87.,   88.,
             89.,   90.,   91.,   92.,   93.,   94.,   95.,   96.,   97.,
             98.,   99.,  100.,  101.,  102.,  103.,  104.,  105.,  106.,
            107.,  108.,  109.,  110.,  111.,  112.,  113.,  114.,  115.,
            116.,  117.,  118.,  119.,  120.,  121.,  122.,  123.,  124.,
            125.,  126.,  127.,  128.,  129.,  130.,  131.,  132.,  133.,
            134.,  135.,  136.,  137.,  138.,  139.,  140.,  141.,  142.,
            143.,  144.,  145.,  146.,  147.,  148.,  149.,  150.,  151.,
            152.,  153.,  154.,  155.,  156.,  157.,  158.,  159.,  160.,
            161.,  162.,  163.,  164.,  165.,  166.,  167.,  168.,  169.,
            170.,  171.,  172.,  173.,  174.,  175.,  176.,  177.,  178.,
            179.,  180.,  181.,  182.,  183.,  184.,  185.,  186.,  187.,
            188.,  189.,  190.,  191.,  192.,  193.,  194.,  195.,  196.,
            197.,  198.,  199.,  200.,  201.,  202.,  203.,  204.,  205.,
            206.,  207.,  208.,  209.,  210.,  211.,  212.,  213.,  214.,
            215.,  216.,  217.,  218.,  219.,  220.,  221.,  222.,  223.,
            224.,  225.,  226.,  227.,  228.,  229.,  230.,  231.,  232.,
            233.,  234.,  235.,  236.,  237.,  238.,  239.,  240.,  241.,
            242.,  243.])
    
     y = array([  0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   8.31593344e-02,
         2.35439791e-01,   9.96024791e-01,   2.05616777e+00,
         7.18482061e+00,   1.88705079e+01,   2.95964175e+01,
         7.67566181e+01,   1.00520725e+02,   1.50101258e+02,
         1.30495335e+02,   7.38818649e+01,   7.88215800e+01,
         8.27782533e+01,   8.54715249e+01,   0.00000000e+00,
         0.00000000e+00,   8.66810877e+01,   0.00000000e+00,
         0.00000000e+00,   8.62917273e+01,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   8.43340655e+01,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         8.10109967e+01,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   7.67001996e+01,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   7.19263508e+01,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   6.73025361e+01,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         6.34476840e+01,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         6.08936791e+01,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         6.00000000e+01,   6.00000000e+01,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   6.08936791e+01,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   6.34476840e+01,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   6.73025361e+01,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         7.19263508e+01,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         7.67001996e+01,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   8.10109967e+01,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00,   8.43340655e+01,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         8.62917273e+01,   0.00000000e+00,   0.00000000e+00,
         8.66810877e+01,   0.00000000e+00,   0.00000000e+00,
         8.54715249e+01,   8.27782533e+01,   7.88215800e+01,
         7.38818649e+01,   1.30495335e+02,   1.50101258e+02,
         1.00520725e+02,   7.67566181e+01,   2.95964175e+01,
         1.88705079e+01,   7.18482061e+00,   2.05616777e+00,
         9.96024791e-01,   2.35439791e-01,   8.31593344e-02,
         0.00000000e+00,   0.00000000e+00,   0.00000000e+00,
         0.00000000e+00,   0.00000000e+00])
    

plotting x against y yields

![xy plot of arrays without interpolation](http://i.stack.imgur.com/pV721.png)

My question is how can I interpolate y so that the plot ignores the zero
values and gives a smooth curve.

The output should look something like this (ignore the axes): ![the curve
should be smooth, ignoring any x channels where the corresponding y value is
zero](http://i.stack.imgur.com/EINgr.png)

Cheers


Answer: Using
[`numpy.where`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html):

    
    
    indice = numpy.where(y != 0)
    plot(x[indice], y[indice])
    

or using
[`numpy.nonzero`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.nonzero.html):

    
    
    indice = numpy.nonzero(y) # OR y.nonzero()
    plot(x[indice], y[indice])
    

![enter image description here](http://i.stack.imgur.com/GFtyJ.png)

* * *

**UPDATE**

interpolation using
[`scipy.interpolate.interp1d`](http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html):

    
    
    from scipy.interpolate import interp1d
    
    indice, = y.nonzero()
    start, stop = indice[0], indice[-1]+1
    f = interp1d(x[indice], y[indice])
    y[start:stop] = f(x[start:stop])
    plot(x, y)
    

