{ "cells": [ { "cell_type": "markdown", "id": "caa5b23d-5ac6-4e7e-9155-70eba6a08474", "metadata": {}, "source": [ "# Lesson 09 demo: Numpy\n", "\n", "## 1. Set up" ] }, { "cell_type": "markdown", "id": "c9348f9a-10d0-4acb-968b-7f263f1e037b", "metadata": {}, "source": [ "To install numpy:\n", "\n", "```text\n", "pip install numpy\n", "```" ] }, { "cell_type": "code", "execution_count": 2, "id": "72553e7f-1f9e-4d43-8cd3-1855560a3adf", "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 3, "id": "cad98d1f-a645-4db7-81f4-01ad24a14c88", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Numpy version: 2.2.6\n" ] } ], "source": [ "print(f\"Numpy version: {np.__version__}\")" ] }, { "cell_type": "markdown", "id": "6ef3cee2-4852-47e1-a90d-ec8a20a0352d", "metadata": { "tags": [], "toc-hr-collapsed": true }, "source": [ "## 2. Creating arrays\n", "\n", "### 2.1. From a list" ] }, { "cell_type": "code", "execution_count": 5, "id": "02bcb75f-e891-444c-8f18-76c7089f26c4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "numpy.ndarray" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_arr = np.array([1, 2, 3, 4, 5])\n", "type(my_arr)" ] }, { "cell_type": "code", "execution_count": 6, "id": "eb25dab0-708c-43bb-b6c7-a7e8a38449a3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1 2 3]\n", " [4 5 6]]\n" ] } ], "source": [ "my_arr = np.array([\n", " [1, 2, 3],\n", " [4, 5, 6]\n", "])\n", "\n", "print(my_arr)" ] }, { "cell_type": "markdown", "id": "d6ad3d7a-77ef-4c52-8266-7bfa9ead0064", "metadata": {}, "source": [ "### 2.2. Using built-functions" ] }, { "cell_type": "code", "execution_count": 9, "id": "7e685562-1815-4e87-9ac1-0abc331215af", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0. 0. 0. 0.]\n", " [0. 0. 0. 0.]\n", " [0. 0. 0. 0.]]\n" ] } ], "source": [ "zero_array = np.zeros((3,4))\n", "print(zero_array)" ] }, { "cell_type": "code", "execution_count": 10, "id": "365b2917-aeac-4470-bc66-838417a004dc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1. 1. 1. 1.]\n", " [1. 1. 1. 1.]\n", " [1. 1. 1. 1.]]\n" ] } ], "source": [ "constant_array = np.full((3,4), 1.0)\n", "print(constant_array)" ] }, { "cell_type": "markdown", "id": "e186681a-05b1-4573-9b79-22c6360494e4", "metadata": {}, "source": [ "## 3. Array attributes" ] }, { "cell_type": "code", "execution_count": 12, "id": "1e6d4d31-ad33-4ee7-9b91-b1a78c3c33c2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3, 4)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "constant_array.shape" ] }, { "cell_type": "code", "execution_count": 13, "id": "fb58df7f-e764-4db6-b8b1-4e9aad8b0cae", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dtype('float64')" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "constant_array.dtype" ] }, { "cell_type": "code", "execution_count": 14, "id": "c0c35d4e-3691-454a-9be6-beb6ff617a69", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "96" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "constant_array.nbytes" ] }, { "cell_type": "markdown", "id": "5d07e1fc-128d-421c-bbcd-250e00e4b2cc", "metadata": { "tags": [], "toc-hr-collapsed": true }, "source": [ "## 4. Array functions & operations\n", "\n", "### 4.1. Arithmetic operations" ] }, { "cell_type": "code", "execution_count": 16, "id": "b849b698-38a9-4e05-b2b3-78200a850b66", "metadata": {}, "outputs": [], "source": [ "a = np.array([10,20,30,40])\n", "b = np.array([1,2,3,4])\n", "c = np.array([1])" ] }, { "cell_type": "code", "execution_count": 17, "id": "5e69a084-183c-4948-a99f-58d4f241fd90", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[11 22 33 44]\n" ] } ], "source": [ "print(a + b)" ] }, { "cell_type": "code", "execution_count": 20, "id": "bdc6d525-fbe6-4067-9645-675953b73097", "metadata": {}, "outputs": [], "source": [ "a_list = [10,20,30,40]\n", "b_list = [1,2,3,4]" ] }, { "cell_type": "code", "execution_count": 21, "id": "838958f0-fb41-4909-b233-af369495d89d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10, 20, 30, 40, 1, 2, 3, 4]\n" ] } ], "source": [ "print(a_list + b_list)" ] }, { "cell_type": "markdown", "id": "e845aa85-b22c-4cb8-9baa-2cb1f60d52b3", "metadata": {}, "source": [ "### 4.2 Statistical methods" ] }, { "cell_type": "code", "execution_count": 22, "id": "75b9e7ba-143e-4def-a927-ce30afb64547", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "25.0\n" ] } ], "source": [ "print(np.mean(a))" ] }, { "cell_type": "code", "execution_count": 23, "id": "f25a74c5-1e46-4bd3-a2ff-b2396f938798", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100\n" ] } ], "source": [ "print(np.sum(a))" ] }, { "cell_type": "markdown", "id": "fca9295e-9afe-46f4-bf43-e323d05391f3", "metadata": {}, "source": [ "### 4.3. Methods on axes" ] }, { "cell_type": "code", "execution_count": 4, "id": "25a85ce0-5be4-4959-aa6f-af302914e8ec", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[10 20 30 40]\n", " [ 1 2 3 4]]\n" ] } ], "source": [ "arr_2d = np.array([\n", " [10,20,30,40],\n", " [1,2,3,4]\n", "\n", "])\n", "\n", "print(arr_2d)" ] }, { "cell_type": "code", "execution_count": 5, "id": "f7928c69-4ff3-4c24-8bfe-429f87eb7053", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2, 4)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr_2d.shape" ] }, { "cell_type": "code", "execution_count": 6, "id": "eff06f00-4bf4-44c2-b825-6470e9a0d976", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "13.75\n" ] } ], "source": [ "print(np.mean(arr_2d))" ] }, { "cell_type": "code", "execution_count": 7, "id": "2861fd4e-8980-47c7-905f-a66f2ee255d5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 5.5 11. 16.5 22. ]\n" ] } ], "source": [ "print(np.mean(arr_2d, axis=0))" ] }, { "cell_type": "code", "execution_count": 8, "id": "27c26538-deae-45d9-948f-5fe06bfac8f7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[25. 2.5]\n" ] } ], "source": [ "print(np.mean(arr_2d, axis=1))" ] }, { "cell_type": "code", "execution_count": 36, "id": "1cf68037-c132-4824-ad0b-905774f56d3a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2, 2, 4)" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr_2d.shape" ] }, { "cell_type": "markdown", "id": "f1a2d3c8-1020-4cbb-a1ef-f69ec68d76a9", "metadata": {}, "source": [ "### 4.4. Shape manipulation" ] }, { "cell_type": "code", "execution_count": 37, "id": "47902f23-e34c-428d-856d-64be29cfdd81", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0 1 2 3 4 5 6 7 8 9 10 11]\n" ] } ], "source": [ "arr = np.arange(12)\n", "print(arr)" ] }, { "cell_type": "code", "execution_count": 38, "id": "8456a09d-c181-4105-a343-95f6cc6ac9a8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0 1 2 3 4 5]\n", " [ 6 7 8 9 10 11]]\n" ] } ], "source": [ "new_arr = arr.reshape(2,6)\n", "print(new_arr)" ] }, { "cell_type": "markdown", "id": "cfe59328-be77-4c58-8608-9808cde8b4f7", "metadata": {}, "source": [ "## Selecting data\n", "\n", "### 5.1. Indexing" ] }, { "cell_type": "code", "execution_count": 65, "id": "e89fea5d-12c9-48f4-ade9-fe2c55f65b56", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10 20 30 40 50]\n" ] } ], "source": [ "a = np.array([10, 20, 30, 40, 50])\n", "print(a)" ] }, { "cell_type": "code", "execution_count": 66, "id": "93b9727e-94b9-4b69-b5a1-f68ea709b8fd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10\n" ] } ], "source": [ "print(a[0])" ] }, { "cell_type": "code", "execution_count": 67, "id": "34ba6004-1096-4c1b-a5b4-19738c0c4fe2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "20\n" ] } ], "source": [ "print(a[1])" ] }, { "cell_type": "code", "execution_count": 68, "id": "a12f27b3-797a-4c12-a423-2a83719ca990", "metadata": {}, "outputs": [ { "ename": "IndexError", "evalue": "index -10 is out of bounds for axis 0 with size 5", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[68], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43ma\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m10\u001b[39;49m\u001b[43m]\u001b[49m)\n", "\u001b[0;31mIndexError\u001b[0m: index -10 is out of bounds for axis 0 with size 5" ] } ], "source": [ "print(a[-10])" ] }, { "cell_type": "code", "execution_count": 70, "id": "e8fb15bf-e58c-47f9-b37f-944989baa7f8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[10 20 30 40]\n", " [ 1 2 3 4]\n", " [ 5 6 7 8]]\n" ] } ], "source": [ "arr_2d = np.array([\n", " [10, 20, 30, 40],\n", " [1, 2, 3, 4],\n", " [5, 6, 7, 8]\n", "])\n", "print(arr_2d)" ] }, { "cell_type": "code", "execution_count": 71, "id": "72d5477e-4588-44da-bd71-bad5abb9c887", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10 20 30 40]\n" ] } ], "source": [ "print(arr_2d[0])" ] }, { "cell_type": "code", "execution_count": 72, "id": "360ad9d0-6bb0-44f1-b29f-ddab82ea35c4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10 20 30 40]\n" ] } ], "source": [ "first_row = arr_2d[0]\n", "print(first_row)" ] }, { "cell_type": "code", "execution_count": 73, "id": "2c2e8e30-41ee-4efe-86e9-1672fb4124df", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "40\n" ] } ], "source": [ "last_ele_first_row = first_row[-1]\n", "print(last_ele_first_row)" ] }, { "cell_type": "code", "execution_count": 74, "id": "2eb54858-f72e-4873-9514-42f2ca493e1b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n" ] } ], "source": [ "print(arr_2d[1][2])" ] }, { "cell_type": "markdown", "id": "38cc1f9d-7683-4642-9205-9d57a281640d", "metadata": {}, "source": [ "### 5.2. Slicing" ] }, { "cell_type": "code", "execution_count": 75, "id": "148f1cfe-1529-4d59-a3d7-211a0f8f2a32", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[10 20 30 40]\n", " [ 1 2 3 4]\n", " [ 5 6 7 8]]\n" ] } ], "source": [ "print(arr_2d)" ] }, { "cell_type": "code", "execution_count": 76, "id": "3dfe2957-e953-44fb-86ea-63131bb47009", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10 20 30 40]\n" ] } ], "source": [ "print(arr_2d[0, :])" ] }, { "cell_type": "code", "execution_count": 77, "id": "7bd37c75-71c9-4271-b3b0-177f219db8f5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10 1 5]\n" ] } ], "source": [ "print(arr_2d[:, 0])" ] }, { "cell_type": "code", "execution_count": 78, "id": "26434514-43c0-40d9-9b79-7904377b4d22", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[20 30 40]\n" ] } ], "source": [ "print(arr_2d[0, 1:4])" ] }, { "cell_type": "markdown", "id": "61f92ab9-db2a-4190-93d4-f5d1526412f6", "metadata": {}, "source": [ "### 5.3. Filtering" ] }, { "cell_type": "code", "execution_count": 79, "id": "aba91c76-e76f-4718-bc89-a2c86969fc3a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10 20 30 40 50 60 70]\n" ] } ], "source": [ "a = np.array([10,20,30,40,50,60,70])\n", "print(a)" ] }, { "cell_type": "code", "execution_count": 81, "id": "8d7ccbc1-1e4e-4e01-8d1a-54b29b17c079", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n" ] } ], "source": [ "b = 50\n", "print(b < 60)" ] }, { "cell_type": "code", "execution_count": 82, "id": "2adf9272-db34-4473-8365-c350b353e40f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[False False True True True True True]\n" ] } ], "source": [ "mask = a > 20\n", "print(mask)" ] }, { "cell_type": "code", "execution_count": 83, "id": "03fe7ec5-0f02-4834-8162-b45a5a94b7d2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[30 40 50 60 70]\n" ] } ], "source": [ "print(a[mask])" ] }, { "cell_type": "code", "execution_count": 84, "id": "95ea146c-76e3-4f6e-bae8-ce884ca74a43", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[30 40 50 60 70]\n" ] } ], "source": [ "print(a[a > 20])" ] }, { "cell_type": "markdown", "id": "8fa6e44e-4436-4526-b126-19801b983093", "metadata": {}, "source": [ "## 6. A note about copies vs 'views'" ] }, { "cell_type": "code", "execution_count": 85, "id": "bbbfa87a-3bff-4034-8c42-4b0876b72576", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[30 40 50]\n" ] } ], "source": [ "copy_a = a[2:5].copy()\n", "print(copy_a)" ] }, { "cell_type": "code", "execution_count": 86, "id": "354edb23-4be3-4859-a168-c3b63cf0c5bd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 30 100 50]\n" ] } ], "source": [ "copy_a[1] = 100\n", "print(copy_a)" ] }, { "cell_type": "code", "execution_count": 88, "id": "5e35c5dc-7303-4c4d-ac76-434c4ed03275", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[10 20 30 40 50 60 70]\n" ] } ], "source": [ "print(a)" ] }, { "cell_type": "code", "execution_count": 89, "id": "462db0ae-13a5-4020-b81f-30ce61f0dda9", "metadata": {}, "outputs": [], "source": [ "b = a[2:5]" ] }, { "cell_type": "code", "execution_count": 90, "id": "798bc8e0-55b6-4958-b554-a1fa0c387582", "metadata": {}, "outputs": [], "source": [ "b[1] = 100" ] }, { "cell_type": "code", "execution_count": 91, "id": "43d1fcb6-da48-4549-a9aa-9ce6bf5f743a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 30 100 50]\n" ] } ], "source": [ "print(b)" ] }, { "cell_type": "code", "execution_count": 92, "id": "b55e40a4-2cfc-4ea6-b8f1-334960ba7067", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 10 20 30 100 50 60 70]\n" ] } ], "source": [ "print(a)" ] }, { "cell_type": "code", "execution_count": 93, "id": "a69313c0-03b2-4866-85ba-72762bcb2650", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "140300009313584" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "id(a)" ] }, { "cell_type": "code", "execution_count": 94, "id": "30676988-4909-4360-a7a2-6239c0b81169", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "140300009313776" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "id(b)" ] }, { "cell_type": "markdown", "id": "ca311e1e-6a6c-437a-8791-1a058d19fca9", "metadata": {}, "source": [ "## 7. Data types" ] }, { "cell_type": "code", "execution_count": 111, "id": "039bbbe1-f0fb-41e4-95df-828b19bf8959", "metadata": {}, "outputs": [], "source": [ "a = np.array([1.8,2,3])" ] }, { "cell_type": "code", "execution_count": 109, "id": "ccbb09a8-9f14-4b82-a2ed-c6dd5ab05ff9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dtype('float64')" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a.dtype" ] }, { "cell_type": "code", "execution_count": 98, "id": "b9de6f22-d9cf-4563-ad1b-91dea3965ef7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dtype('float64')" ] }, "execution_count": 98, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b = a.astype(np.float64)\n", "b.dtype" ] }, { "cell_type": "code", "execution_count": 100, "id": "1206ec36-d7d6-456e-b5ff-a3149502deac", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dtype('float32')" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c = a.astype(np.float32)\n", "c.dtype" ] }, { "cell_type": "code", "execution_count": 101, "id": "d76a7c39-8793-4f38-85fd-1ee510d07c96", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1. 2. 3.]\n" ] } ], "source": [ "print(b)" ] }, { "cell_type": "code", "execution_count": 102, "id": "df7acf9c-1fcf-44e4-8b7c-4c83f8aa7bf2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1. 2. 3.]\n" ] } ], "source": [ "print(c)" ] }, { "cell_type": "code", "execution_count": 103, "id": "c765c051-7949-44fb-8515-a9fa123938c5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "24\n" ] } ], "source": [ "print(b.nbytes)" ] }, { "cell_type": "code", "execution_count": 104, "id": "c70047ba-5e71-4448-a8e4-5f6fabaeb87c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "12\n" ] } ], "source": [ "print(c.nbytes)" ] }, { "cell_type": "code", "execution_count": 112, "id": "62b8a04e-22eb-4943-a5d7-cd8794504080", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 2 3]\n" ] } ], "source": [ "print(a.astype(np.int32))" ] } ], "metadata": { "kernelspec": { "display_name": "Python (myenv)", "language": "python", "name": "myenv" }, "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.10.2" } }, "nbformat": 4, "nbformat_minor": 5 }