# How to use interpolate in Numpy

NumPy provides the interp function, which is used for one-dimensional linear interpolation. The function takes four required arguments:

## Numpy interpolation

The interp function in NumPy requires at least three arguments for interpolation:

x: A 1-D array representing the x-coordinates of the data points.
xp: A 1-D array of x-coordinates at which to evaluate the interpolated values.
fp: A 1-D array representing the y-coordinates of the data points. The fp array should have the same length as xp.
left and right (optional): The values to be used for out-of-bounds extrapolation. If not given, left and right are set to fp[0] and fp[-1], respectively.

Here is an example of how you can use the interp function in NumPy:

```import numpy as np

x = np.array([0, 1, 2, 3, 4])
xp = np.array([1.5, 2.5, 3.5])
fp = np.array([2, 3, 4])

interpolated_values = np.interp(xp, x, fp)

print(interpolated_values)

```

This will output:

```[2.5 3.5 4. ]
```

This example shows how to find interpolated values for x-coordinates 1.5, 2.5, and 3.5 based on the given data pairs defined by arrays x and fp.

### Handling Edge Cases

The `interp` function provides two optional parameters, `left` and `right`, which allow you to specify values for out-of-bounds extrapolation. By default, `left` is set to `fp[0]`, and `right` is set to `fp[-1]`. However, there are situations where you might want to customize these values.

### Customizing Extrapolation Values

Imagine a scenario where you have temperature data over time, and you want to estimate the temperature values for dates before the recorded data begins and after it ends. You can easily achieve this by specifying custom extrapolation values using the `left` and `right` parameters.

``````
import numpy as np

# Known data
dates = np.array([0, 1, 2, 3, 4])
temperatures = np.array([25, 30, 35, 40, 45])

# Dates for extrapolation
extrapolation_dates = np.array([-1, 5])
extrapolation_values = np.interp(extrapolation_dates, dates, temperatures, left=20, right=50)

print(extrapolation_values)
```
```

In this example, we set `left` to 20 and `right` to 50, which means that if we interpolate values for dates earlier than 0 or later than 4, the function will return 20 and 50, respectively. Customizing extrapolation values can be particularly useful when dealing with real-world data where you may have domain-specific knowledge about what values to use beyond the recorded data range.

### Vectorized Interpolation

NumPy is well-known for its ability to efficiently perform element-wise operations on arrays. You can take advantage of this feature to perform interpolation on multiple points simultaneously by providing arrays for both `xp` and `x`. This can significantly improve performance when interpolating a large number of values.

``````
import numpy as np

x = np.array([0, 1, 2, 3, 4])
xp = np.array([1.5, 2.5, 3.5])
fp = np.array([2, 3, 4])

# Vectorized interpolation
interpolated_values = np.interp(xp, x, fp)

print(interpolated_values)
```
```

In this example, `xp` contains multiple points for which we want to interpolate values. By passing the entire array to `xp`, the `interp` function efficiently computes all interpolated values in a single operation.