{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "np.random.seed(12345)\n", "import matplotlib.pyplot as plt\n", "plt.rc(\"figure\", figsize=(10, 6))\n", "np.set_printoptions(precision=4, suppress=True)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "my_arr = np.arange(1_000_000)\n", "my_list = list(range(1_000_000))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "%timeit my_arr2 = my_arr * 2\n", "%timeit my_list2 = [x * 2 for x in my_list]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "data = np.array([[1.5, -0.1, 3], [0, -3, 6.5]])\n", "data" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "data * 10\n", "data + data" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "data.shape\n", "data.dtype" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "data1 = [6, 7.5, 8, 0, 1]\n", "arr1 = np.array(data1)\n", "arr1" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]\n", "arr2 = np.array(data2)\n", "arr2" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "arr2.ndim\n", "arr2.shape" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "arr1.dtype\n", "arr2.dtype" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "np.zeros(10)\n", "np.zeros((3, 6))\n", "np.empty((2, 3, 2))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "np.arange(15)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "arr1 = np.array([1, 2, 3], dtype=np.float64)\n", "arr2 = np.array([1, 2, 3], dtype=np.int32)\n", "arr1.dtype\n", "arr2.dtype" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "arr = np.array([1, 2, 3, 4, 5])\n", "arr.dtype\n", "float_arr = arr.astype(np.float64)\n", "float_arr\n", "float_arr.dtype" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])\n", "arr\n", "arr.astype(np.int32)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "numeric_strings = np.array([\"1.25\", \"-9.6\", \"42\"], dtype=np.string_)\n", "numeric_strings.astype(float)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "int_array = np.arange(10)\n", "calibers = np.array([.22, .270, .357, .380, .44, .50], dtype=np.float64)\n", "int_array.astype(calibers.dtype)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "zeros_uint32 = np.zeros(8, dtype=\"u4\")\n", "zeros_uint32" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "arr = np.array([[1., 2., 3.], [4., 5., 6.]])\n", "arr\n", "arr * arr\n", "arr - arr" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "1 / arr\n", "arr ** 2" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "arr2 = np.array([[0., 4., 1.], [7., 2., 12.]])\n", "arr2\n", "arr2 > arr" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "arr = np.arange(10)\n", "arr\n", "arr[5]\n", "arr[5:8]\n", "arr[5:8] = 12\n", "arr" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "arr_slice = arr[5:8]\n", "arr_slice" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "arr_slice[1] = 12345\n", "arr" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "arr_slice[:] = 64\n", "arr" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])\n", "arr2d[2]" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "arr2d[0][2]\n", "arr2d[0, 2]" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])\n", "arr3d" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "arr3d[0]" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "old_values = arr3d[0].copy()\n", "arr3d[0] = 42\n", "arr3d\n", "arr3d[0] = old_values\n", "arr3d" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "arr3d[1, 0]" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "x = arr3d[1]\n", "x\n", "x[0]" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "arr\n", "arr[1:6]" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "arr2d\n", "arr2d[:2]" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "arr2d[:2, 1:]" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "lower_dim_slice = arr2d[1, :2]" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "lower_dim_slice.shape" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "arr2d[:2, 2]" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "arr2d[:, :1]" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "arr2d[:2, 1:] = 0\n", "arr2d" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "names = np.array([\"Bob\", \"Joe\", \"Will\", \"Bob\", \"Will\", \"Joe\", \"Joe\"])\n", "data = np.array([[4, 7], [0, 2], [-5, 6], [0, 0], [1, 2],\n", " [-12, -4], [3, 4]])\n", "names\n", "data" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "names == \"Bob\"" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "data[names == \"Bob\"]" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "data[names == \"Bob\", 1:]\n", "data[names == \"Bob\", 1]" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "names != \"Bob\"\n", "~(names == \"Bob\")\n", "data[~(names == \"Bob\")]" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "cond = names == \"Bob\"\n", "data[~cond]" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "mask = (names == \"Bob\") | (names == \"Will\")\n", "mask\n", "data[mask]" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "data[data < 0] = 0\n", "data" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "data[names != \"Joe\"] = 7\n", "data" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "arr = np.zeros((8, 4))\n", "for i in range(8):\n", " arr[i] = i\n", "arr" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "arr[[4, 3, 0, 6]]" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "arr[[-3, -5, -7]]" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "arr = np.arange(32).reshape((8, 4))\n", "arr\n", "arr[[1, 5, 7, 2], [0, 3, 1, 2]]" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "arr[[1, 5, 7, 2], [0, 3, 1, 2]]\n", "arr[[1, 5, 7, 2], [0, 3, 1, 2]] = 0\n", "arr" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "arr = np.arange(15).reshape((3, 5))\n", "arr\n", "arr.T" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [], "source": [ "arr = np.array([[0, 1, 0], [1, 2, -2], [6, 3, 2], [-1, 0, -1], [1, 0, 1]])\n", "arr\n", "np.dot(arr.T, arr)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "arr.T @ arr" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [], "source": [ "arr\n", "arr.swapaxes(0, 1)" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [], "source": [ "samples = np.random.standard_normal(size=(4, 4))\n", "samples" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "from random import normalvariate\n", "N = 1_000_000\n", "%timeit samples = [normalvariate(0, 1) for _ in range(N)]\n", "%timeit np.random.standard_normal(N)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "rng = np.random.default_rng(seed=12345)\n", "data = rng.standard_normal((2, 3))" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "type(rng)" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "arr = np.arange(10)\n", "arr\n", "np.sqrt(arr)\n", "np.exp(arr)" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [], "source": [ "x = rng.standard_normal(8)\n", "y = rng.standard_normal(8)\n", "x\n", "y\n", "np.maximum(x, y)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [], "source": [ "arr = rng.standard_normal(7) * 5\n", "arr\n", "remainder, whole_part = np.modf(arr)\n", "remainder\n", "whole_part" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "arr\n", "out = np.zeros_like(arr)\n", "np.add(arr, 1)\n", "np.add(arr, 1, out=out)\n", "out" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "points = np.arange(-5, 5, 0.01) # 100 equally spaced points\n", "xs, ys = np.meshgrid(points, points)\n", "ys" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [], "source": [ "z = np.sqrt(xs ** 2 + ys ** 2)\n", "z" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "plt.imshow(z, cmap=plt.cm.gray, extent=[-5, 5, -5, 5])\n", "plt.colorbar()\n", "plt.title(\"Image plot of $\\sqrt{x^2 + y^2}$ for a grid of values\")" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "plt.draw()" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "plt.close(\"all\")" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [], "source": [ "xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])\n", "yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])\n", "cond = np.array([True, False, True, True, False])" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [], "source": [ "result = [(x if c else y)\n", " for x, y, c in zip(xarr, yarr, cond)]\n", "result" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [], "source": [ "result = np.where(cond, xarr, yarr)\n", "result" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [], "source": [ "arr = rng.standard_normal((4, 4))\n", "arr\n", "arr > 0\n", "np.where(arr > 0, 2, -2)" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [], "source": [ "np.where(arr > 0, 2, arr) # set only positive values to 2" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [], "source": [ "arr = rng.standard_normal((5, 4))\n", "arr\n", "arr.mean()\n", "np.mean(arr)\n", "arr.sum()" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [], "source": [ "arr.mean(axis=1)\n", "arr.sum(axis=0)" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [], "source": [ "arr = np.array([0, 1, 2, 3, 4, 5, 6, 7])\n", "arr.cumsum()" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [], "source": [ "arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])\n", "arr" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [], "source": [ "arr.cumsum(axis=0)\n", "arr.cumsum(axis=1)" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [], "source": [ "arr = rng.standard_normal(100)\n", "(arr > 0).sum() # Number of positive values\n", "(arr <= 0).sum() # Number of non-positive values" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [], "source": [ "bools = np.array([False, False, True, False])\n", "bools.any()\n", "bools.all()" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [], "source": [ "arr = rng.standard_normal(6)\n", "arr\n", "arr.sort()\n", "arr" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [], "source": [ "arr = rng.standard_normal((5, 3))\n", "arr" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [], "source": [ "arr.sort(axis=0)\n", "arr\n", "arr.sort(axis=1)\n", "arr" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [], "source": [ "arr2 = np.array([5, -10, 7, 1, 0, -3])\n", "sorted_arr2 = np.sort(arr2)\n", "sorted_arr2" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [], "source": [ "names = np.array([\"Bob\", \"Will\", \"Joe\", \"Bob\", \"Will\", \"Joe\", \"Joe\"])\n", "np.unique(names)\n", "ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4])\n", "np.unique(ints)" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [], "source": [ "sorted(set(names))" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [], "source": [ "values = np.array([6, 0, 0, 3, 2, 5, 6])\n", "np.in1d(values, [2, 3, 6])" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [], "source": [ "arr = np.arange(10)\n", "np.save(\"some_array\", arr)" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [], "source": [ "np.load(\"some_array.npy\")" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [], "source": [ "np.savez(\"array_archive.npz\", a=arr, b=arr)" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [], "source": [ "arch = np.load(\"array_archive.npz\")\n", "arch[\"b\"]" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [], "source": [ "np.savez_compressed(\"arrays_compressed.npz\", a=arr, b=arr)" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [], "source": [ "!rm some_array.npy\n", "!rm array_archive.npz\n", "!rm arrays_compressed.npz" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [], "source": [ "x = np.array([[1., 2., 3.], [4., 5., 6.]])\n", "y = np.array([[6., 23.], [-1, 7], [8, 9]])\n", "x\n", "y\n", "x.dot(y)" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [], "source": [ "np.dot(x, y)" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [], "source": [ "x @ np.ones(3)" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [], "source": [ "from numpy.linalg import inv, qr\n", "X = rng.standard_normal((5, 5))\n", "mat = X.T @ X\n", "inv(mat)\n", "mat @ inv(mat)" ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [], "source": [ "import random\n", "position = 0\n", "walk = [position]\n", "nsteps = 1000\n", "for _ in range(nsteps):\n", " step = 1 if random.randint(0, 1) else -1\n", " position += step\n", " walk.append(position)\n" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [], "source": [ "plt.figure()" ] }, { "cell_type": "code", "execution_count": 104, "metadata": {}, "outputs": [], "source": [ "plt.plot(walk[:100])" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [], "source": [ "nsteps = 1000\n", "rng = np.random.default_rng(seed=12345) # fresh random generator\n", "draws = rng.integers(0, 2, size=nsteps)\n", "steps = np.where(draws == 0, 1, -1)\n", "walk = steps.cumsum()" ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [], "source": [ "walk.min()\n", "walk.max()" ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [], "source": [ "(np.abs(walk) >= 10).argmax()" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [], "source": [ "nwalks = 5000\n", "nsteps = 1000\n", "draws = rng.integers(0, 2, size=(nwalks, nsteps)) # 0 or 1\n", "steps = np.where(draws > 0, 1, -1)\n", "walks = steps.cumsum(axis=1)\n", "walks" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [], "source": [ "walks.max()\n", "walks.min()" ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [], "source": [ "hits30 = (np.abs(walks) >= 30).any(axis=1)\n", "hits30\n", "hits30.sum() # Number that hit 30 or -30" ] }, { "cell_type": "code", "execution_count": 111, "metadata": {}, "outputs": [], "source": [ "crossing_times = (np.abs(walks[hits30]) >= 30).argmax(axis=1)\n", "crossing_times" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [], "source": [ "crossing_times.mean()" ] }, { "cell_type": "code", "execution_count": 113, "metadata": {}, "outputs": [], "source": [ "draws = 0.25 * rng.standard_normal((nwalks, nsteps))" ] }, { "cell_type": "code", "execution_count": 114, "metadata": {}, "outputs": [], "source": [] } ], "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.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }