{ "cells": [ { "cell_type": "markdown", "id": "8109deef-c7bd-49eb-bd9b-4277c4d4ef87", "metadata": {}, "source": [ "# Indexing numpy arrays\n", "\n", "Indexing is the term used for selecting entries in an array, e.g. depending on its content. Again this is an operation that we cannot perform in a simple way using standard lists and where Numpy is very useful.\n", "\n", "As a first simple example, we create here a 1D Numpy array:" ] }, { "cell_type": "code", "execution_count": 1, "id": "396bbd4b-d770-4507-9d85-737437a0eacd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1, 17, 25, 3, 5, 26, 12])" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy\n", "measurements = numpy.asarray([1, 17, 25, 3, 5, 26, 12])\n", "measurements" ] }, { "cell_type": "markdown", "id": "f2404e7b-d2fd-4b61-b0fc-1cebceee8d08", "metadata": {}, "source": [ "Our goal is now to recover in this array only values larger than a certain threshold, ```10``` for example. When we use simple Python variables, such comparisons can be done like this:" ] }, { "cell_type": "code", "execution_count": 2, "id": "27de0afe-61f0-4105-b4b2-b15c42da728f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = 5\n", "b = a > 10\n", "b" ] }, { "cell_type": "markdown", "id": "2dbe703d-db50-4047-be25-07d7148a4b6e", "metadata": {}, "source": [ "The output is a *boolean* value which takes the value ```True``` or ```False```. Luckily we can do the same thing with Numpy arrays:" ] }, { "cell_type": "code", "execution_count": 3, "id": "c40eca74-9d79-4659-b91e-aea0ae488dae", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([False, True, True, False, False, True, True])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mask = measurements > 10\n", "mask" ] }, { "cell_type": "markdown", "id": "f2d72d36-51a5-435e-bd71-087c990ba43c", "metadata": {}, "source": [ "Instead of getting a single boolean value we now get a *Numpy array of booleans*. We can now apply use this array as a mask to our data to retrieve a new array that only contains masked values (```True``` in the mask array). For this we use again brackets (like for selecting rows and columns), but use the mask instead of indices:" ] }, { "cell_type": "code", "execution_count": 4, "id": "94a8b9c4-aca8-47be-9b74-c305a82d4c41", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([17, 25, 26, 12])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "measurements[mask]" ] }, { "cell_type": "markdown", "id": "929a246f-3582-4f61-96d1-7bd936533b4d", "metadata": {}, "source": [ "## With images\n", "\n", "Instead of using this simle 1D array, we can perform the same operation on an entire image. Let's import the blobs picture again:" ] }, { "cell_type": "code", "execution_count": 5, "id": "636f4921-260c-4ee2-b4f0-501c3f2fb310", "metadata": {}, "outputs": [], "source": [ "from skimage.io import imread, imshow\n", "from microfilm.microplot import microshow" ] }, { "cell_type": "code", "execution_count": 6, "id": "666604b3-1bbd-4b1a-a22f-2a794e628668", "metadata": {}, "outputs": [], "source": [ "image = imread(\"../../data/blobs.tif\")" ] }, { "cell_type": "code", "execution_count": 7, "id": "39b3152f-babe-4c18-92f2-63b576c60512", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "microshow(image);" ] }, { "cell_type": "code", "execution_count": 8, "id": "08ec1893-df96-46df-9d58-aa57052c8b92", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[False, False, False, ..., True, True, True],\n", " [False, False, False, ..., True, True, True],\n", " [False, False, False, ..., True, True, True],\n", " ...,\n", " [False, False, False, ..., False, False, False],\n", " [False, False, False, ..., False, False, False],\n", " [False, False, False, ..., False, False, False]])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mask = image > 100\n", "mask" ] }, { "cell_type": "markdown", "id": "00552069-3b6b-4cd2-ae9b-98bfa7642b82", "metadata": {}, "source": [ "Now we obtain a 2D array filled with boolean values. We can even look at it (white values are ```True```):" ] }, { "cell_type": "code", "execution_count": 9, "id": "9a8e236b-faf0-4e1b-8f6d-0563f8f93086", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "microshow(mask);" ] }, { "cell_type": "markdown", "id": "34937999-eafc-45bc-8b8f-8d0a22f5155c", "metadata": {}, "source": [ "And now we can do indexing to recover all pixel values above our threshold of 100:" ] }, { "cell_type": "code", "execution_count": 10, "id": "9daf9414-947d-449f-9469-ef58ec93a385", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([112, 152, 184, ..., 152, 128, 112], dtype=uint8)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "image[mask]" ] }, { "cell_type": "code", "execution_count": 11, "id": "66be8edb-e58b-4712-a5de-38709fb10db9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "24969" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(image[mask])" ] }, { "cell_type": "markdown", "id": "04c7111d-fd2f-4435-88e3-5f892c236c3e", "metadata": {}, "source": [ "We have 24969 pixels above the threshold." ] }, { "cell_type": "markdown", "id": "e2327ef7-c0c3-4c26-8e6c-3002a6abe439", "metadata": {}, "source": [ "## Exercises\n", "\n", "Create a new mask for all pixel values above 200." ] }, { "cell_type": "code", "execution_count": null, "id": "03f9825d-c806-4e85-b7ea-fa75b02e7299", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "330a3186-c740-4be7-9eb9-91822d78e173", "metadata": {}, "source": [ "Apply the mask to retrieve a new array with numbers above 200." ] }, { "cell_type": "code", "execution_count": null, "id": "78c9d414-310f-4771-aadc-a18032fe0408", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "9d956a11-a549-4dda-bda1-25c3199a3cdc", "metadata": {}, "source": [ "Compute the average of all pixels above 200." ] }, { "cell_type": "code", "execution_count": null, "id": "3a20c289-9191-47ba-bdac-aa1332d50c16", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.13" } }, "nbformat": 4, "nbformat_minor": 5 }