{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Numerical Python \n", "from Scratch and then with Numpy" ] }, { "cell_type": "code", "execution_count": 133, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from functools import partial, reduce\n", "from numpy.linalg import inv, qr" ] }, { "cell_type": "code", "execution_count": 105, "metadata": { "collapsed": false }, "outputs": [], "source": [ "grades_1 = [95, 80, 75]\n", "grades_2 = [30, 20, 50]\n", "\n", "def vector_add(v, w):\n", " return [v_i + w_i for v_i, w_i in zip(v, w)]\n", "\n", "\n", "def vector_substract(v, w):\n", " return [v_i - w_i for v_i, w_i in zip(v, w)]\n", "\n", "\n", " #sum a list of vectors\n", "def vector_sum(vectors):\n", " return reduce(vector_add, vectors)\n", "\n", " #or\n", "vector_sum = partial(reduce, vector_add)" ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import math\n", "\n", "def scalar_multiply(c, v):\n", " return [c * v_i for v_i in v]\n", "\n", "\n", "def vector_mean(vectors):\n", " n = len(vectors)\n", " return scalar_multiply(1/n, vector_sum(vectors))\n", "\n", "\n", "def dot(v, w):\n", " return sum(v_i * w_i for v_i, w_i in zip(v,w))\n", "\n", "\n", "def sum_of_squares(v):\n", " return dot(v, v)\n", "\n", "\n", "def magnitude(v):\n", " return math.sqrt(sum_of_squares(v))\n", "\n", " #[(v_1 - w_1)**2 + ... + (v_n - w_n)**2]**(1/2)\n", "def distance(v, w):\n", " return magnitude(vector_substract(v, w))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Matrices" ] }, { "cell_type": "code", "execution_count": 107, "metadata": { "collapsed": true }, "outputs": [], "source": [ "A = [[1, 2, 3], [4, 5, 6]] # A has 2 rows and 3 columns\n", "B = [[1, 2], [3, 4], [5, 6]] # B has 3 rows and 2 columns\n", "\n", "\n", "def shape(A):\n", " num_rows = len(A)\n", " num_cols = len(A[0]) if A else 0\n", " return num_rows, num_cols\n", "\n", "def get_row(A, i):\n", " return A[i]\n", "\n", "def get_column(A, j):\n", " return [A_i[j] for A_i in A]\n" ] }, { "cell_type": "code", "execution_count": 109, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]]\n" ] } ], "source": [ "def make_matrix(num_rows, num_cols, entry_fn):\n", " return [[entry_fn(i, j)\n", " for j in range(num_cols)] for i in range(num_rows)]\n", "\n", "\n", "def is_diagonal(i, j):\n", " return 1 if i == j else 0\n", "\n", "print (make_matrix(5, 5, is_diagonal))" ] }, { "cell_type": "code", "execution_count": 110, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[0, 1]" ] }, "execution_count": 110, "metadata": {}, "output_type": "execute_result" } ], "source": [ " # user 0 1 2 3 4 5 6\n", "friendships = [(0, 1), (0, 2), (1, 2), (1, 3), (2, 3), (3, 4), (4, 5)]\n", "\n", "friends_of_five = [i \n", " for i, is_friend in enumerate(friendships[5])\n", " if is_friend]\n", "\n", "friends_of_five" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Numpy" ] }, { "cell_type": "code", "execution_count": 134, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ndarrays" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[6, 7.5, 8, 0, 1, 6, 7.5, 8, 0, 1]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data1= [6, 7.5, 8, 0, 1]\n", "data1*2" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 12., 15., 16., 0., 2.])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr1 = np.array(data1)\n", "arr1*2" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Nested sequences will be converted into a multidimensional array\n", "data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(array([[1, 2, 3, 4],\n", " [5, 6, 7, 8]]), 2, (2, 4))" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr2= np.array(data2)\n", "arr2, arr2.ndim, arr2.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating new arrays\n", "zeros, ones, empty, arange" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.zeros(10)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 0., 0.],\n", " [ 0., 0., 0.]])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.zeros((2,3))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[[ 0.],\n", " [ 0.],\n", " [ 0.]],\n", "\n", " [[ 0.],\n", " [ 0.],\n", " [ 0.]]])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.empty((2,3,1))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.arange(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### cast arrays\n", "astype" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "dtype('int64')" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.array([1, 2, 3, 4, 5])\n", "arr.dtype" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1., 2., 3., 4., 5.])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "float_arr = arr.astype(np.float64)\n", "float_arr" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1.23, 32. , 2.32])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numeric_strings = np.array(['1.23', '32.', '2.32'], dtype=np.string_)\n", "numeric_strings.astype(float)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3, 4, 5])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#we can also use another's dtype attribute\n", "float_arr.astype(arr.dtype)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Operations between arrays" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1., 2., 3.],\n", " [ 4., 5., 6.]])" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.array([[1., 2., 3.], [4., 5., 6.]])\n", "arr" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 2., 6., 12.],\n", " [ 20., 30., 42.]])" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr*arr + arr" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , 0.5 , 0.33333333],\n", " [ 0.25 , 0.2 , 0.16666667]])" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1/arr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic Indexing and Slicing" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.arange(10)\n", "arr" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(5, array([5, 6, 7]))" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr[5], arr[5:8]" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 2, 3, 4, 12, 12, 12, 8, 9])" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr[5:8]= 12\n", "arr" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# The data is not copied, and any modifications to the view will be \n", "# reflected in the source array\n", "\n", "arr_slice = arr[5:8]\n", "arr_slice[1] = 12345 " ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 2, 3, 4, 12, 12345, 12, 8, 9])" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [], "source": [ "arr_slice[:] = 64" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 2, 3, 4, 64, 64, 64, 8, 9])" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " If you want a copy of a slice of an ndarray : \n", " \n", " arr[5:8].copy()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### higher dimensional arrays" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[[ 1, 2, 3],\n", " [ 4, 5, 6]],\n", "\n", " [[ 7, 8, 9],\n", " [10, 11, 12]]])" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])\n", "arr3d" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[1, 2, 3],\n", " [4, 5, 6]])" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr3d[0]" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([7, 8, 9])" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr3d[1, 0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Indexing with slices" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1, 2, 3, 4, 64])" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr[1:6]" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 4, 5, 6],\n", " [10, 11, 12]])" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr3d[:,1]" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": true }, "outputs": [], "source": [ "arr3d[:, 1] = 0" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[[1, 2, 3],\n", " [0, 0, 0]],\n", "\n", " [[7, 8, 9],\n", " [0, 0, 0]]])" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr3d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Boolean Indexing" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": true }, "outputs": [], "source": [ "names = np.array(['Bob', 'Jose', 'Will', 'Jose', 'Jose', 'Bob', 'Will'])" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[-0.91776589, 1.81318656, -0.69701235, 0.4609818 ],\n", " [ 1.17533039, 0.65752213, -0.42729355, -0.30506766],\n", " [ 0.54956114, -0.10768298, 1.3608634 , 0.55986477],\n", " [ 2.37112426, 0.10273777, -0.2538347 , 0.33108211],\n", " [ 1.40843937, -2.02787102, 1.03815263, 1.68914553],\n", " [ 0.54469567, 0.75296059, -0.78659548, -1.22232052],\n", " [-1.7454679 , 1.01084493, 0.42538005, -0.37146686]])" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = np.random.randn(7, 4)\n", "data" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ True, False, False, False, False, True, False], dtype=bool)" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "names == 'Bob'" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[-0.69701235, 0.4609818 ],\n", " [-0.78659548, -1.22232052]])" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Selecting data from an array by boolean indexing always creates a copy of the data\n", "\n", "data[names == 'Bob', 2:]" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[-0.91776589, 1.81318656, -0.69701235, 0.4609818 ],\n", " [ 0.54956114, -0.10768298, 1.3608634 , 0.55986477],\n", " [ 0.54469567, 0.75296059, -0.78659548, -1.22232052],\n", " [-1.7454679 , 1.01084493, 0.42538005, -0.37146686]])" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Boolean arithmetic operands &(and), |(or)\n", "# The keywords and, or do not work\n", "\n", "mask = (names == 'Bob') | (names == 'Will')\n", "data[mask]" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0. , 1.81318656, 0. , 0.4609818 ],\n", " [ 1.17533039, 0.65752213, 0. , 0. ],\n", " [ 0.54956114, 0. , 1.3608634 , 0.55986477],\n", " [ 2.37112426, 0.10273777, 0. , 0.33108211],\n", " [ 1.40843937, 0. , 1.03815263, 1.68914553],\n", " [ 0.54469567, 0.75296059, 0. , 0. ],\n", " [ 0. , 1.01084493, 0.42538005, 0. ]])" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Setting values with boolean arrays works in a common-sense way\n", "\n", "data[data < 0] = 0\n", "data" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 7. , 7. , 7. , 7. ],\n", " [ 1.17533039, 0.65752213, 0. , 0. ],\n", " [ 7. , 7. , 7. , 7. ],\n", " [ 2.37112426, 0.10273777, 0. , 0.33108211],\n", " [ 1.40843937, 0. , 1.03815263, 1.68914553],\n", " [ 7. , 7. , 7. , 7. ],\n", " [ 7. , 7. , 7. , 7. ]])" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[names != 'Jose'] = 7\n", "data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fancy Indexing\n", "always copies the data into a new array" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 0., 0., 0.],\n", " [ 1., 1., 1., 1.],\n", " [ 2., 2., 2., 2.],\n", " [ 3., 3., 3., 3.],\n", " [ 4., 4., 4., 4.],\n", " [ 5., 5., 5., 5.],\n", " [ 6., 6., 6., 6.],\n", " [ 7., 7., 7., 7.]])" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.empty((8, 4))\n", "for i in range(8):\n", " arr[i]= i\n", "arr" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 4., 4., 4., 4.],\n", " [ 3., 3., 3., 3.],\n", " [ 0., 0., 0., 0.],\n", " [ 6., 6., 6., 6.]])" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr[[4, 3, 0, 6]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### reshape" ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 1, 2, 3],\n", " [ 4, 5, 6, 7],\n", " [ 8, 9, 10, 11],\n", " [12, 13, 14, 15],\n", " [16, 17, 18, 19],\n", " [20, 21, 22, 23],\n", " [24, 25, 26, 27],\n", " [28, 29, 30, 31]])" ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.arange(32).reshape((8, 4))\n", "arr" ] }, { "cell_type": "code", "execution_count": 100, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 4, 23, 29, 10])" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr[[1, 5, 7, 2], [0, 3, 1, 2]]" ] }, { "cell_type": "code", "execution_count": 105, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 4, 7, 5, 6],\n", " [20, 23, 21, 22],\n", " [28, 31, 29, 30],\n", " [ 8, 11, 9, 10]])" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### np.ix_\n", "converts two 1D integer arrays to an indexer that selects the square region" ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 4, 7, 5, 6],\n", " [20, 23, 21, 22],\n", " [28, 31, 29, 30],\n", " [ 8, 11, 9, 10]])" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])]" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Transposing arrays\n", "returns a view on the underlying data without copying anything" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 1, 2, 3, 4],\n", " [ 5, 6, 7, 8, 9],\n", " [10, 11, 12, 13, 14]])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.arange(15).reshape((3, 5))\n", "arr" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 5, 10],\n", " [ 1, 6, 11],\n", " [ 2, 7, 12],\n", " [ 3, 8, 13],\n", " [ 4, 9, 14]])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr.T" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0.84924286, 0.94684985],\n", " [ 0.89306423, 0.87010754],\n", " [ 0.45245223, 0.14917812]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Inner matrix product X^T X\n", "\n", "arr = np.random.rand(3, 2)\n", "arr" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1.61773806, 1.58228961, 0.52549111],\n", " [ 1.58228961, 1.55465085, 0.53386991],\n", " [ 0.52549111, 0.53386991, 0.22696713]])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.dot(arr, arr.T)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[[ 0, 1, 2, 3],\n", " [ 4, 5, 6, 7]],\n", "\n", " [[ 8, 9, 10, 11],\n", " [12, 13, 14, 15]]])" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Simple transposing with .T is just a special case of swapping axes\n", "\n", "arr = np.arange(16).reshape((2,2,4))\n", "arr" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[[ 0, 4],\n", " [ 1, 5],\n", " [ 2, 6],\n", " [ 3, 7]],\n", "\n", " [[ 8, 12],\n", " [ 9, 13],\n", " [10, 14],\n", " [11, 15]]])" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr.swapaxes(1,2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Universal Functions" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.arange(10)\n", "arr" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0. , 1. , 1.41421356, 1.73205081, 2. ,\n", " 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sqrt(arr)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(array([ 0.70929646, 1.19255308, 0.2883751 , 0.51938486, -1.39551465,\n", " -0.31412971, -0.13811443, -0.20601564]),\n", " array([-0.71319119, 0.80197301, 0.36682888, -0.48417237, 1.04998052,\n", " 0.28269519, -0.41175128, -0.63315385]))" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x, y = np.random.randn(8), np.random.randn(8)\n", "x, y" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.70929646, 1.19255308, 0.36682888, 0.51938486, 1.04998052,\n", " 0.28269519, -0.13811443, -0.20601564])" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# element-wise\n", "np.maximum(x, y)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(array([ 0.41859292, 0.38510615, 0.57675021, 0.03876971, -0.79102931,\n", " -0.62825942, -0.27622887, -0.41203129]),\n", " array([ 1., 2., 0., 1., -2., -0., -0., -0.]))" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# modf - returns the fractional and integral parts of a floating point array\n", "\n", "np.modf(x*2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Processing" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ -2.00000000e+00, -1.80000000e+00, -1.60000000e+00,\n", " -1.40000000e+00, -1.20000000e+00, -1.00000000e+00,\n", " -8.00000000e-01, -6.00000000e-01, -4.00000000e-01,\n", " -2.00000000e-01, -4.44089210e-16, 2.00000000e-01,\n", " 4.00000000e-01, 6.00000000e-01, 8.00000000e-01,\n", " 1.00000000e+00, 1.20000000e+00, 1.40000000e+00,\n", " 1.60000000e+00, 1.80000000e+00])" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The np.meshgrid takes two 1D arrays and produces two 2D matrices\n", "\n", "points = np.arange(-2, 2, 0.2)\n", "points" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [], "source": [ "xs, ys = np.meshgrid(points, points)\n", "\n", "#xs repeats the same matrix\n", "#ys each element is a matrix" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "\n", "z = np.sqrt( xs**2 + ys**2)\n", "plt.imshow(z, cmap=plt.cm.Blues); plt.colorbar()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Expressing Conditional Logic" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": true }, "outputs": [], "source": [ "xarr = np.array([1.1, 1.2, 1.3])\n", "yarr = np.array([2.1, 2.2, 2.3])\n", "cond = np.array([True, False, True])" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[1.1000000000000001, 2.2000000000000002, 1.3]" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = [(x if c else y) \n", " for x,y,c in zip(xarr, yarr, cond)]\n", "result" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### where" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1.1, 2.2, 1.3])" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Better and faster to use np.where\n", "# When True, yield x, otherwise yield y.\n", "\n", "result = np.where(cond, xarr, yarr)\n", "result" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0.81366883, 1.74640033, -0.7999725 , 1.70049061],\n", " [ 0.79013196, 1.45862238, 0.59867441, -1.32287603],\n", " [ 0.27886446, 0.15284553, -0.09686105, 0.67906191],\n", " [-0.02549812, -1.4063992 , 1.58292681, 0.4133061 ]])" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#i.e. replace all positive number with 2 and negative with -2\n", "\n", "arr = np.random.randn(4, 4)\n", "arr" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 2, 2, -2, 2],\n", " [ 2, 2, 2, -2],\n", " [ 2, 2, -2, 2],\n", " [-2, -2, 2, 2]])" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.where(arr > 0, 2, -2)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 2. , 2. , -0.7999725 , 2. ],\n", " [ 2. , 2. , 2. , -1.32287603],\n", " [ 2. , 2. , -0.09686105, 2. ],\n", " [-0.02549812, -1.4063992 , 2. , 2. ]])" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.where(arr > 0, 2, arr)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "with some cleverness, we can rewrite:\n", " result = []\n", " for i in range(n):\n", " if cond1[i] and cond2[i]:\n", " result.append(0)\n", " elif cond1[i]:\n", " result.append(1)\n", " elif cond2[i]:\n", " result.append(2)\n", " else:\n", " result.append(3)\n", "\n", "to:\n", "\n", " np.where(cond1 & cond2, 0,\n", " np.where(cond1, 1, \n", " np.where(cond2, 2, 3)))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Mathematical and Statistical Methods" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[-0.66938329, -0.09460955, 0.68429733, -1.55316588, 0.57557981],\n", " [ 0.3939079 , -0.76428942, 0.31884977, 0.08591903, -0.41605294],\n", " [ 0.61596097, 0.98709557, -0.81181499, -0.83320327, -0.66210309],\n", " [-0.32706941, -2.19338433, -0.00648633, 1.93043244, 1.01631555],\n", " [ 1.60540979, -0.8461175 , -0.71620113, -1.45893314, 0.04452177]])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.random.randn(5, 5)\n", "arr" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "-0.12378097356639609" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr.mean()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "-3.0945243391599022" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr.sum()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([-0.21145632, -0.07633313, -0.14081296, 0.08396158, -0.27426404])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# using axis argument, computes statistics over the given axis\n", "\n", "arr.mean(axis = 1)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "-5.1593718607785846" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ " arr.sum(axis= 0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### cumsum, cumprod" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# produce intermediate results\n", "\n", "arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(array([[ 0, 1, 2],\n", " [ 3, 5, 7],\n", " [ 9, 12, 15]]), array([[ 0, 1, 3],\n", " [ 3, 7, 12],\n", " [ 6, 13, 21]]))" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr.cumsum(0) ,arr.cumsum(1)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(array([[ 0, 1, 2],\n", " [ 0, 4, 10],\n", " [ 0, 28, 80]]), array([[ 0, 0, 0],\n", " [ 3, 12, 60],\n", " [ 6, 42, 336]]))" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr.cumprod(0), arr.cumprod(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Methods for Boolean Arrays" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [], "source": [ "arr = np.random.randn(100)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "51" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "j=0\n", "for i in arr:\n", " if i> 0:\n", " j+=1\n", "j" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "51" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(arr>0).sum() # number of positive values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### any, all\n", "wheter one or more values in an array is True" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": true }, "outputs": [], "source": [ "bools = np.array([False, False, True, False])" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bools.any()" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bools.all()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sorting" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([-1.54619964, 0.51813091, 1.03035116, 1.0247142 , -1.34726526,\n", " 0.48848893, -0.85376593, -1.6967397 ])" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.random.randn(8)\n", "arr" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([-1.6967397 , -1.54619964, -1.34726526, -0.85376593, 0.48848893,\n", " 0.51813091, 1.0247142 , 1.03035116])" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr.sort()\n", "arr" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Multidimensional arrays" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[-1.09021923, 0.87892698, 0.99630531],\n", " [-0.17105776, -2.10651959, 0.05856556],\n", " [-1.44070552, 1.72413621, 0.63163125],\n", " [ 0.47490565, -0.51911486, 0.89645334],\n", " [ 1.0099947 , -1.2598008 , 0.34537338]])" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr = np.random.randn(5, 3)\n", "arr" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[-1.09021923, 0.87892698, 0.99630531],\n", " [-2.10651959, -0.17105776, 0.05856556],\n", " [-1.44070552, 0.63163125, 1.72413621],\n", " [-0.51911486, 0.47490565, 0.89645334],\n", " [-1.2598008 , 0.34537338, 1.0099947 ]])" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr.sort(1)\n", "arr" ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# A quick and dirty way to compute quantiles\n", "\n", "large_arr = np.random.randn(100)\n", "large_arr.sort()" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "-1.4415947282633843" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "large_arr[int(0.05 * len(large_arr))] # 5% quantile" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Unique and Other Set Logic" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": true }, "outputs": [], "source": [ "names = np.array(['Bob', 'Jose', 'Will', 'Jose', 'Jose', 'Bob', 'Will'])" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array(['Bob', 'Jose', 'Will'], \n", " dtype=']" ] }, "execution_count": 140, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "norm = np.random.normal(size= 10000)\n", "histogram = Counter(norm*10000//1000)\n", "plt.bar([x for x in histogram.keys()], histogram.values())\n", "\n", "xs = [x/10.0 for x in np.arange(-500, 500)]\n", "plt.plot(xs, [10000*normal_pdf(x, sigma=10) for x in xs], 'r-', lw='2')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Random walks" ] }, { "cell_type": "code", "execution_count": 141, "metadata": { "collapsed": true }, "outputs": [], "source": [ "nsteps = 1000\n", "draws = np.random.randint(0, 2, size= nsteps)\n", "steps = np.where(draws > 0, 1, -1)\n", "walk = steps.cumsum()" ] }, { "cell_type": "code", "execution_count": 142, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 142, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nZ8TnYQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot([i for i in np.arange(nsteps)], walk)" ] }, { "cell_type": "code", "execution_count": 143, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(-39, 14)" ] }, "execution_count": 143, "metadata": {}, "output_type": "execute_result" } ], "source": [ "walk.min(), walk.max()" ] }, { "cell_type": "code", "execution_count": 144, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "809" ] }, "execution_count": 144, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# when it first crosses 20\n", "(np.abs(walk) >= 20).argmax()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Many random walks" ] }, { "cell_type": "code", "execution_count": 145, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nrhdCRAshRgFjga1SylNAuRBinisIfhPwr3Y8B00nETM4hrn5c4keHE3SnCSO/vQoR1Z5uolkk2T/\nHfvd88UvFNNUE1xWZOuErT7LhBDM2jyLofcMBWDI95RXs+S1EhrOhifwbrDzop3ugkWnw0lTrZZF\n0fQe2ppWu0IIcRxYALwvhPgAQEqZB7wF5AFrgDstJdvfA14A9gMHpJQftuUcNF2HhIkJLDq5iMrt\nlQAUPlKIbDJjGYW/8AxM7//2fjYkbAhp34vOLPKY7zO/D2N/NxbAPUo58uARn+rz9sa4NoD8G/PZ\nMnpLWI+n6VxKVpf4HeX2VtqaJfVPKeUwKWWclDJdSnm5Zd0vpZRjpZSTpJQfWZZnSykzpJTjpJR3\nt+X4mq5Jn8V93NPrIs3gdmV2pb/NA2KNTRguoDG/HdO2k2sDTdXmaCJ7fjZVuVU0nArviEbTOTjK\nHJR+Vkr+1/PZ/ZXdADTVNXHug3Ot2l/+TfnYhZ3dV+32G3OrPVTbLWJxutJb0+5M+dsUhnzfN/mt\n7lAdoJoxiUg1Khh4/UC/+7BWchvquVkyi2H/Pczv9pNeM2XWK7b7by/bVhpOm8ahcmslRmlR5Q7T\nEDrKHNQcDP2NVDZJKnNaZkh7O8ceP8aeq/e0+34bzjZQe6QWgL1X72XnhTsBqN1fS+3hWoqeLWL3\nFbtbtM/8m5WhKHlV1Qqde9e/wTG+W+H67rYX2mBo2p2YtBjGPTXOPX/wRwexCzvVe6qJGRrD6F+M\nZvb22fS7sh+nV59mQ58N7L7K/CHWHql1V3IDpF6c2uwxB90wiKH/o2IaOXNz2LFsR7tdj+Ocg9JP\nS9kyegsi2gzV1exThiF7VjYNJeoHX3B7AVvH+cZdArHvln1kz85ut3PtqTTVNFH4WCF7vrqHw/cf\n5uw/z7b7MXYs2uF2MZbZyzzWbRmzhUP/cwiA0387TfkX5X73UZlb6Y5rOeudzRaVSimxCzsVXyhD\nkTM3B2e9s03XEU60wdCEnRO/NUtv4sYqCfTE6YkMv1+1fW2qbOLcu+fI+0YeTofTIy4w/+D8kI8z\n9n/HuqfL15fjOOdol6D0pv6b2HmxetuUDZKxT4z12ebztM9xOpycfUc9yOzCjuO8I+h+9163l5LX\nzAdKU12TR8xHY7Lv1n0c+ckRzv7dNBR2YWf/d/cH+VTLqD1QG9J2eV/LY8eiHZRtKCN7QTYFd6g0\n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\nVAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nwalks = 5\n", "nsteps = 10000\n", "draws = np.random.randint(0, 2, size=(nwalks, nsteps))\n", "steps = np.where(draws > 0, 1, -1)\n", "walks = steps.cumsum(1)\n", "\n", "for i in range(nwalks):\n", " plt.plot([j for j in np.arange(nsteps)], walks[i]) " ] }, { "cell_type": "code", "execution_count": 146, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(-160, 189)" ] }, "execution_count": 146, "metadata": {}, "output_type": "execute_result" } ], "source": [ "walks.min(), walks.max()\n", "\n", "# idxmax() associated index" ] }, { "cell_type": "code", "execution_count": 147, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ True, True, False, True, True], dtype=bool)" ] }, "execution_count": 147, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hits100 = (np.abs(walks) >= 100).any(1)\n", "hits100" ] }, { "cell_type": "code", "execution_count": 148, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 148, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hits100.sum() # random walks that hit 100" ] }, { "cell_type": "code", "execution_count": 149, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([2899, 3797, 7151, 3233])" ] }, "execution_count": 149, "metadata": {}, "output_type": "execute_result" } ], "source": [ "crossing_time = (np.abs(walks[hits100]) >= 100).argmax(1)\n", "crossing_time" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "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.5.1" } }, "nbformat": 4, "nbformat_minor": 0 }