Skip to content

Instantly share code, notes, and snippets.

@dominiquesydow
Created April 16, 2021 07:02
Show Gist options
  • Save dominiquesydow/2f0acfdd92ae712fc62d3467141cb9e8 to your computer and use it in GitHub Desktop.
Save dominiquesydow/2f0acfdd92ae712fc62d3467141cb9e8 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Calculate points on a line\n",
"\n",
"https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy import interpolate"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Define endpoints of line of interest"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"from scipy import interpolate\n",
"x = [0,9]\n",
"y = [0,9]\n",
"f = interpolate.interp1d(x, y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Calculate points on line with _fixed distance_"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"xnew = np.arange(0, 9.1, 2.5)\n",
"ynew = f(xnew) # use interpolation function returned by `interp1d`\n",
"plt.plot(x, y, 'o', xnew, ynew, '*')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([0. , 2.5, 5. , 7.5]), array([0. , 2.5, 5. , 7.5]))"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"xnew, ynew"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Calculate points on line with _fixed number of points_"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"n_points = 4"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"xnew = np.linspace(0, 9, n_points, endpoint=True)\n",
"ynew = f(xnew) # use interpolation function returned by `interp1d`\n",
"plt.plot(x, y, 'o', xnew, ynew, '*')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([0., 3., 6., 9.]), array([0., 3., 6., 9.]))"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"xnew, ynew"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment