Skip to content

Instantly share code, notes, and snippets.

@kwinkunks
Created September 29, 2021 03:06
Show Gist options
  • Save kwinkunks/25c44bde2d5a54fdacc3f5520e125dac to your computer and use it in GitHub Desktop.
Save kwinkunks/25c44bde2d5a54fdacc3f5520e125dac to your computer and use it in GitHub Desktop.
Indexing a 2D NumPy array to sample a map
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "5322c8a6",
"metadata": {},
"source": [
"# Get samples from a NumPy array with coordinates\n",
"\n",
"Let's say we have a map, as a 2D array, and some coordinates (pairs of x, y index locations).\n",
"\n",
"I'd like to sample the map (below) at those locations (the white dots)."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "3da14026",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7fa7b090ad90>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
},
{
"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": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"arr = np.arange(25).reshape(5, 5)\n",
"pos = np.array([(0, 0), (2, 3), (4, 1), (4, 4)])\n",
"\n",
"plt.imshow(arr)\n",
"plt.scatter(*pos.T, c='w')"
]
},
{
"cell_type": "markdown",
"id": "9133d33d",
"metadata": {},
"source": [
"Get those samples with indexing"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "3659abf9",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 13, 21, 24])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"arr[tuple(pos.T)]"
]
},
{
"cell_type": "markdown",
"id": "017ca20b",
"metadata": {},
"source": [
"---\n",
"\n",
"© Agile Scientific CC BY"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "py39",
"language": "python",
"name": "py39"
},
"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.9.1"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment