Explorar o código

Updated notebooks, ready to be presented in slideshow mode

Valerio Maggio %!s(int64=10) %!d(string=hai) anos
pai
achega
5304cc3d9c

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 627 - 140
02_0_Introduction to Numpy.ipynb


+ 145 - 38
02_1_Indexing and Slicing.ipynb

@@ -13,7 +13,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "### Setting up the data"
     "### Setting up the data"
    ]
    ]
@@ -426,7 +430,7 @@
    "cell_type": "markdown",
    "cell_type": "markdown",
    "metadata": {
    "metadata": {
     "slideshow": {
     "slideshow": {
-     "slide_type": "-"
+     "slide_type": "subslide"
     }
     }
    },
    },
    "source": [
    "source": [
@@ -818,7 +822,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Fancy indexing is the name for when an array or list is used in-place of an index: "
     "Fancy indexing is the name for when an array or list is used in-place of an index: "
    ]
    ]
@@ -896,7 +904,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "-"
+     "slide_type": "subslide"
     }
     }
    },
    },
    "outputs": [
    "outputs": [
@@ -944,7 +952,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "* Alternatively:"
     "* Alternatively:"
    ]
    ]
@@ -993,7 +1005,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "-"
+     "slide_type": "fragment"
     }
     }
    },
    },
    "outputs": [
    "outputs": [
@@ -1049,7 +1061,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "-"
+     "slide_type": "subslide"
     }
     }
    },
    },
    "outputs": [
    "outputs": [
@@ -1070,14 +1082,22 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "## Indexing and Array Memory Management"
     "## Indexing and Array Memory Management"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Numpy arrays support two different way of storing data into memory, namely\n",
     "Numpy arrays support two different way of storing data into memory, namely\n",
     "\n",
     "\n",
@@ -1093,7 +1113,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Let's an example"
     "Let's an example"
    ]
    ]
@@ -1102,7 +1126,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 17,
    "execution_count": 17,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -1115,7 +1142,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 18,
    "execution_count": 18,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -1125,7 +1155,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "* **Note**: no changes in meaning for indexing operations"
     "* **Note**: no changes in meaning for indexing operations"
    ]
    ]
@@ -1134,7 +1168,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 19,
    "execution_count": 19,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -1156,7 +1193,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 20,
    "execution_count": 20,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -1178,7 +1218,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 21,
    "execution_count": 21,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -1200,7 +1243,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 22,
    "execution_count": 22,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -1220,7 +1266,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "<img src=\"images/storage_index.png\" />"
     "<img src=\"images/storage_index.png\" />"
    ]
    ]
@@ -1251,7 +1301,7 @@
    "cell_type": "markdown",
    "cell_type": "markdown",
    "metadata": {
    "metadata": {
     "slideshow": {
     "slideshow": {
-     "slide_type": "-"
+     "slide_type": "fragment"
     }
     }
    },
    },
    "source": [
    "source": [
@@ -1323,7 +1373,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
    "source": [
    "source": [
     "With the `np.diag` function we can also extract the diagonal and subdiagonals of an array:"
     "With the `np.diag` function we can also extract the diagonal and subdiagonals of an array:"
    ]
    ]
@@ -1391,7 +1445,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
    "source": [
    "source": [
     "The `np.take` function is similar to fancy indexing described above:"
     "The `np.take` function is similar to fancy indexing described above:"
    ]
    ]
@@ -1522,7 +1580,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
    "source": [
    "source": [
     "Constructs and array by picking elements form several arrays:"
     "Constructs and array by picking elements form several arrays:"
    ]
    ]
@@ -1559,7 +1621,7 @@
    "cell_type": "markdown",
    "cell_type": "markdown",
    "metadata": {
    "metadata": {
     "slideshow": {
     "slideshow": {
-     "slide_type": "subslide"
+     "slide_type": "slide"
     }
     }
    },
    },
    "source": [
    "source": [
@@ -1568,7 +1630,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "We can compute with subsets of the data in an array using indexing, fancy indexing, and the other methods of extracting data from an array (described above)."
     "We can compute with subsets of the data in an array using indexing, fancy indexing, and the other methods of extracting data from an array (described above)."
    ]
    ]
@@ -1577,7 +1643,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 79,
    "execution_count": 79,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -1592,7 +1661,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "fragment"
+     "slide_type": "subslide"
     }
     }
    },
    },
    "outputs": [
    "outputs": [
@@ -1628,7 +1697,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "### Brief Preview (of some of the things presented in next notebooks)"
     "### Brief Preview (of some of the things presented in next notebooks)"
    ]
    ]
@@ -1674,7 +1747,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 83,
    "execution_count": 83,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -1687,7 +1763,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "fragment"
+     "slide_type": "subslide"
     }
     }
    },
    },
    "outputs": [
    "outputs": [
@@ -1884,7 +1960,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "As mentioned several times by now, to get good performance we should try to avoid looping over elements in our vectors and matrices, and instead use vectorized algorithms. The first step in converting a scalar algorithm to a vectorized algorithm is to make sure that the functions we write work with vector inputs."
     "As mentioned several times by now, to get good performance we should try to avoid looping over elements in our vectors and matrices, and instead use vectorized algorithms. The first step in converting a scalar algorithm to a vectorized algorithm is to make sure that the functions we write work with vector inputs."
    ]
    ]
@@ -1952,7 +2032,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "### `np.vectorize`"
     "### `np.vectorize`"
    ]
    ]
@@ -1998,14 +2082,22 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "### `np.frompyfunc`"
     "### `np.frompyfunc`"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "**Universal functions** (Ufuncs) work on arrays, element-by-element, or on scalars. \n",
     "**Universal functions** (Ufuncs) work on arrays, element-by-element, or on scalars. \n",
     "\n",
     "\n",
@@ -2016,7 +2108,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 105,
    "execution_count": 105,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -2034,7 +2129,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "## Excercise"
     "## Excercise"
    ]
    ]
@@ -2057,7 +2156,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": null,
    "execution_count": null,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -2077,7 +2179,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "When using arrays in conditions in for example `if` statements and other boolean expressions, one need to use one of `any` or `all`, which requires that any or all elements in the array evalutes to `True`:"
     "When using arrays in conditions in for example `if` statements and other boolean expressions, one need to use one of `any` or `all`, which requires that any or all elements in the array evalutes to `True`:"
    ]
    ]
@@ -2139,7 +2245,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "fragment"
+     "slide_type": "subslide"
     }
     }
    },
    },
    "outputs": [
    "outputs": [
@@ -2160,6 +2266,7 @@
   }
   }
  ],
  ],
  "metadata": {
  "metadata": {
+  "celltoolbar": "Slideshow",
   "kernelspec": {
   "kernelspec": {
    "display_name": "Python 3",
    "display_name": "Python 3",
    "language": "python",
    "language": "python",

+ 181 - 75
03_Numpy_Operations.ipynb

@@ -13,7 +13,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "**Vectorizing** code is the key to writing efficient numerical calculation with Python/Numpy. \n",
     "**Vectorizing** code is the key to writing efficient numerical calculation with Python/Numpy. \n",
     "\n",
     "\n",
@@ -26,7 +30,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "fragment"
+     "slide_type": "subslide"
     }
     }
    },
    },
    "outputs": [],
    "outputs": [],
@@ -47,7 +51,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "We can use the usual arithmetic operators to multiply, add, subtract, and divide arrays with scalar numbers."
     "We can use the usual arithmetic operators to multiply, add, subtract, and divide arrays with scalar numbers."
    ]
    ]
@@ -120,7 +128,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 28,
    "execution_count": 28,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -133,7 +144,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "subslide"
+     "slide_type": "fragment"
     }
     }
    },
    },
    "outputs": [
    "outputs": [
@@ -174,7 +185,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "When we add, subtract, multiply and divide arrays with each other, the default behaviour is **element-wise** operations:"
     "When we add, subtract, multiply and divide arrays with each other, the default behaviour is **element-wise** operations:"
    ]
    ]
@@ -311,7 +326,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "What about **matrix mutiplication**? \n",
     "What about **matrix mutiplication**? \n",
     "\n",
     "\n",
@@ -401,7 +420,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "## A *new* dedicated Infix operator for Matrix Multiplication\n",
     "## A *new* dedicated Infix operator for Matrix Multiplication\n",
     "\n",
     "\n",
@@ -416,7 +439,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "### The `Matrix` Array Type"
     "### The `Matrix` Array Type"
    ]
    ]
@@ -438,7 +465,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 37,
    "execution_count": 37,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -524,7 +554,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "fragment"
+     "slide_type": "subslide"
     }
     }
    },
    },
    "outputs": [
    "outputs": [
@@ -707,7 +737,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Above we have used the `.T` to transpose the matrix object `v`. We could also have used the `transpose` function to accomplish the same thing. \n",
     "Above we have used the `.T` to transpose the matrix object `v`. We could also have used the `transpose` function to accomplish the same thing. \n",
     "\n",
     "\n",
@@ -908,7 +942,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 56,
    "execution_count": 56,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -1006,7 +1043,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 58,
    "execution_count": 58,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -1029,7 +1069,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 59,
    "execution_count": 59,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -1063,7 +1106,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 60,
    "execution_count": 60,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -1085,7 +1131,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 61,
    "execution_count": 61,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -1116,7 +1165,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "The shape of an Numpy array can be modified without copying the underlaying data, which makes it a fast operation even for large arrays."
     "The shape of an Numpy array can be modified without copying the underlaying data, which makes it a fast operation even for large arrays."
    ]
    ]
@@ -1125,7 +1178,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 65,
    "execution_count": 65,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -1247,7 +1303,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "### Flattening"
     "### Flattening"
    ]
    ]
@@ -1260,12 +1320,12 @@
     }
     }
    },
    },
    "source": [
    "source": [
-    "We can also use the function `flatten` to make a higher-dimensional array into a vector. But this function create a copy of the data."
+    "### `np.ravel`"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "code",
    "cell_type": "code",
-   "execution_count": 70,
+   "execution_count": 98,
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
@@ -1276,24 +1336,22 @@
     {
     {
      "data": {
      "data": {
       "text/plain": [
       "text/plain": [
-       "array([ 5,  5,  5,  5,  5, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 30, 31,\n",
-       "       32, 33, 34, 40, 41, 42, 43, 44])"
+       "array([1, 2, 3, 4, 5, 6])"
       ]
       ]
      },
      },
-     "execution_count": 70,
+     "execution_count": 98,
      "metadata": {},
      "metadata": {},
      "output_type": "execute_result"
      "output_type": "execute_result"
     }
     }
    ],
    ],
    "source": [
    "source": [
-    "B = A.flatten()\n",
-    "\n",
-    "B"
+    "a = np.array([[1, 2, 3], [4, 5, 6]])\n",
+    "a.ravel()"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "code",
    "cell_type": "code",
-   "execution_count": 71,
+   "execution_count": 99,
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
@@ -1304,124 +1362,139 @@
     {
     {
      "data": {
      "data": {
       "text/plain": [
       "text/plain": [
-       "array([10, 10, 10, 10, 10, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 30, 31,\n",
-       "       32, 33, 34, 40, 41, 42, 43, 44])"
+       "array([[1, 4],\n",
+       "       [2, 5],\n",
+       "       [3, 6]])"
       ]
       ]
      },
      },
-     "execution_count": 71,
+     "execution_count": 99,
      "metadata": {},
      "metadata": {},
      "output_type": "execute_result"
      "output_type": "execute_result"
     }
     }
    ],
    ],
    "source": [
    "source": [
-    "B[0:5] = 10\n",
-    "\n",
-    "B"
+    "a.T"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "code",
    "cell_type": "code",
-   "execution_count": 72,
+   "execution_count": 100,
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "fragment"
+     "slide_type": "subslide"
     }
     }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
      "data": {
      "data": {
       "text/plain": [
       "text/plain": [
-       "array([[ 5,  5,  5,  5,  5],\n",
-       "       [10, 11, 12, 13, 14],\n",
-       "       [20, 21, 22, 23, 24],\n",
-       "       [30, 31, 32, 33, 34],\n",
-       "       [40, 41, 42, 43, 44]])"
+       "array([1, 4, 2, 5, 3, 6])"
       ]
       ]
      },
      },
-     "execution_count": 72,
+     "execution_count": 100,
      "metadata": {},
      "metadata": {},
      "output_type": "execute_result"
      "output_type": "execute_result"
     }
     }
    ],
    ],
    "source": [
    "source": [
-    "A # now A has not changed, because B's data is a copy of A's, not refering to the same data"
+    "a.T.ravel()"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
-    "### `np.ravel`"
+    "We can also use the function `flatten` to make a higher-dimensional array into a vector. But this function create a copy of the data."
    ]
    ]
   },
   },
   {
   {
    "cell_type": "code",
    "cell_type": "code",
-   "execution_count": 98,
+   "execution_count": 70,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
      "data": {
      "data": {
       "text/plain": [
       "text/plain": [
-       "array([1, 2, 3, 4, 5, 6])"
+       "array([ 5,  5,  5,  5,  5, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 30, 31,\n",
+       "       32, 33, 34, 40, 41, 42, 43, 44])"
       ]
       ]
      },
      },
-     "execution_count": 98,
+     "execution_count": 70,
      "metadata": {},
      "metadata": {},
      "output_type": "execute_result"
      "output_type": "execute_result"
     }
     }
    ],
    ],
    "source": [
    "source": [
-    "a = np.array([[1, 2, 3], [4, 5, 6]])\n",
-    "a.ravel()"
+    "B = A.flatten()\n",
+    "\n",
+    "B"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "code",
    "cell_type": "code",
-   "execution_count": 99,
+   "execution_count": 71,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
      "data": {
      "data": {
       "text/plain": [
       "text/plain": [
-       "array([[1, 4],\n",
-       "       [2, 5],\n",
-       "       [3, 6]])"
+       "array([10, 10, 10, 10, 10, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 30, 31,\n",
+       "       32, 33, 34, 40, 41, 42, 43, 44])"
       ]
       ]
      },
      },
-     "execution_count": 99,
+     "execution_count": 71,
      "metadata": {},
      "metadata": {},
      "output_type": "execute_result"
      "output_type": "execute_result"
     }
     }
    ],
    ],
    "source": [
    "source": [
-    "a.T"
+    "B[0:5] = 10\n",
+    "\n",
+    "B"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "code",
    "cell_type": "code",
-   "execution_count": 100,
+   "execution_count": 72,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
      "data": {
      "data": {
       "text/plain": [
       "text/plain": [
-       "array([1, 4, 2, 5, 3, 6])"
+       "array([[ 5,  5,  5,  5,  5],\n",
+       "       [10, 11, 12, 13, 14],\n",
+       "       [20, 21, 22, 23, 24],\n",
+       "       [30, 31, 32, 33, 34],\n",
+       "       [40, 41, 42, 43, 44]])"
       ]
       ]
      },
      },
-     "execution_count": 100,
+     "execution_count": 72,
      "metadata": {},
      "metadata": {},
      "output_type": "execute_result"
      "output_type": "execute_result"
     }
     }
    ],
    ],
    "source": [
    "source": [
-    "a.T.ravel()"
+    "A # now A has not changed, because B's data is a copy of A's, not refering to the same data"
    ]
    ]
   },
   },
   {
   {
@@ -1437,7 +1510,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "With `newaxis`, we can insert new dimensions in an array, for example converting a vector to a column or row matrix:"
     "With `newaxis`, we can insert new dimensions in an array, for example converting a vector to a column or row matrix:"
    ]
    ]
@@ -1574,7 +1651,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Using function `repeat`, `tile`, `vstack`, `hstack`, and `concatenate` we can create larger vectors and matrices from smaller ones:"
     "Using function `repeat`, `tile`, `vstack`, `hstack`, and `concatenate` we can create larger vectors and matrices from smaller ones:"
    ]
    ]
@@ -1594,7 +1675,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 82,
    "execution_count": 82,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -1671,7 +1755,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "-"
+     "slide_type": "fragment"
     }
     }
    },
    },
    "outputs": [],
    "outputs": [],
@@ -1747,7 +1831,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 88,
    "execution_count": 88,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -1771,7 +1858,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 89,
    "execution_count": 89,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -1803,7 +1893,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "To achieve high performance, assignments in Python usually do not copy the underlaying objects. \n",
     "To achieve high performance, assignments in Python usually do not copy the underlaying objects. \n",
     "\n",
     "\n",
@@ -1816,7 +1910,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 90,
    "execution_count": 90,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -1843,7 +1940,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "subslide"
+     "slide_type": "fragment"
     }
     }
    },
    },
    "outputs": [],
    "outputs": [],
@@ -1989,14 +2086,22 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "# Exercise: Shape manipulations"
     "# Exercise: Shape manipulations"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "* Look at the docstring for `reshape`, especially the notes section which\n",
     "* Look at the docstring for `reshape`, especially the notes section which\n",
     "has some more information about copies and views.\n",
     "has some more information about copies and views.\n",
@@ -2009,6 +2114,7 @@
   }
   }
  ],
  ],
  "metadata": {
  "metadata": {
+  "celltoolbar": "Slideshow",
   "kernelspec": {
   "kernelspec": {
    "display_name": "Python 3",
    "display_name": "Python 3",
    "language": "python",
    "language": "python",

+ 85 - 22
04_Data_Processing.ipynb

@@ -40,7 +40,7 @@
    "cell_type": "markdown",
    "cell_type": "markdown",
    "metadata": {
    "metadata": {
     "slideshow": {
     "slideshow": {
-     "slide_type": "-"
+     "slide_type": "subslide"
     }
     }
    },
    },
    "source": [
    "source": [
@@ -121,7 +121,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 9,
    "execution_count": 9,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -134,7 +137,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "fragment"
+     "slide_type": "subslide"
     }
     }
    },
    },
    "outputs": [
    "outputs": [
@@ -277,7 +280,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "* Useful when storing and reading back numpy array data. \n",
     "* Useful when storing and reading back numpy array data. \n",
     "\n",
     "\n",
@@ -286,7 +293,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "### `np.save`"
     "### `np.save`"
    ]
    ]
@@ -317,7 +328,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "### `np.load`"
     "### `np.load`"
    ]
    ]
@@ -349,7 +364,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "## Matlab Users\n",
     "## Matlab Users\n",
     "\n",
     "\n",
@@ -360,7 +379,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 42,
    "execution_count": 42,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -371,7 +393,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 43,
    "execution_count": 43,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -398,7 +423,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 45,
    "execution_count": 45,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -437,7 +465,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Often it is useful to store datasets in Numpy arrays. Numpy provides a number of functions to calculate statistics of datasets in arrays. \n",
     "Often it is useful to store datasets in Numpy arrays. Numpy provides a number of functions to calculate statistics of datasets in arrays. \n",
     "\n",
     "\n",
@@ -485,7 +517,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 25,
    "execution_count": 25,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -506,7 +541,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
    "source": [
    "source": [
     "The daily mean temperature in Stockholm over the last 200 year so has been about 6.2 C."
     "The daily mean temperature in Stockholm over the last 200 year so has been about 6.2 C."
    ]
    ]
@@ -526,7 +565,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 26,
    "execution_count": 26,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -559,7 +601,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 27,
    "execution_count": 27,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -582,7 +627,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 28,
    "execution_count": 28,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -616,7 +664,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 29,
    "execution_count": 29,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -641,7 +692,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "-"
+     "slide_type": "fragment"
     }
     }
    },
    },
    "outputs": [
    "outputs": [
@@ -780,7 +831,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "When functions such as `min`, `max`, etc., is applied to a multidimensional arrays, it is sometimes useful to apply the calculation to the entire array, and sometimes only on a row or column basis. Using the `axis` argument we can specify how these functions should behave: "
     "When functions such as `min`, `max`, etc., is applied to a multidimensional arrays, it is sometimes useful to apply the calculation to the entire array, and sometimes only on a row or column basis. Using the `axis` argument we can specify how these functions should behave: "
    ]
    ]
@@ -791,7 +846,7 @@
    "metadata": {
    "metadata": {
     "collapsed": false,
     "collapsed": false,
     "slideshow": {
     "slideshow": {
-     "slide_type": "fragment"
+     "slide_type": "subslide"
     }
     }
    },
    },
    "outputs": [
    "outputs": [
@@ -869,7 +924,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 41,
    "execution_count": 41,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -890,13 +948,18 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Many other functions and methods in the `array` and `matrix` classes accept the same (optional) `axis` keyword argument."
     "Many other functions and methods in the `array` and `matrix` classes accept the same (optional) `axis` keyword argument."
    ]
    ]
   }
   }
  ],
  ],
  "metadata": {
  "metadata": {
+  "celltoolbar": "Slideshow",
   "kernelspec": {
   "kernelspec": {
    "display_name": "Python 3",
    "display_name": "Python 3",
    "language": "python",
    "language": "python",

+ 165 - 34
05_Memmapping.ipynb

@@ -2,14 +2,22 @@
  "cells": [
  "cells": [
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "# Memmapping"
     "# Memmapping"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "The numpy package makes it possible to memory map large contiguous chunks of binary files as shared memory for all the Python processes running on a given host:"
     "The numpy package makes it possible to memory map large contiguous chunks of binary files as shared memory for all the Python processes running on a given host:"
    ]
    ]
@@ -18,7 +26,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 1,
    "execution_count": 1,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -27,7 +38,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "* Creating a `numpy.memmap` instance with the `w+` mode creates a file on the filesystem and zeros its content. "
     "* Creating a `numpy.memmap` instance with the `w+` mode creates a file on the filesystem and zeros its content. "
    ]
    ]
@@ -36,7 +51,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 2,
    "execution_count": 2,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -62,7 +80,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "* This binary file can then be mapped as a new numpy array by all the engines having access to the same filesystem. \n",
     "* This binary file can then be mapped as a new numpy array by all the engines having access to the same filesystem. \n",
     "* The `mode='r+'` opens this shared memory area in read write mode:"
     "* The `mode='r+'` opens this shared memory area in read write mode:"
@@ -72,7 +94,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 3,
    "execution_count": 3,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -92,7 +117,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 4,
    "execution_count": 4,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -112,7 +140,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 5,
    "execution_count": 5,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -129,7 +160,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "* Memory mapped arrays created with `mode='r+'` can be modified and the modifications are shared \n",
     "* Memory mapped arrays created with `mode='r+'` can be modified and the modifications are shared \n",
     "    - in case of multiple process"
     "    - in case of multiple process"
@@ -139,7 +174,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 12,
    "execution_count": 12,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -150,7 +188,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 13,
    "execution_count": 13,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -167,14 +208,22 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "### Memmap Operations"
     "### Memmap Operations"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Memmap arrays generally behave very much like regular in-memory numpy arrays:"
     "Memmap arrays generally behave very much like regular in-memory numpy arrays:"
    ]
    ]
@@ -183,7 +232,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 14,
    "execution_count": 14,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -203,14 +255,22 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Before allocating more data let us define a couple of utility functions from the previous exercise (and more) to monitor what is used by which engine and what is still free on the cluster as a whole:"
     "Before allocating more data let us define a couple of utility functions from the previous exercise (and more) to monitor what is used by which engine and what is still free on the cluster as a whole:"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "* Let's allocate a 80MB memmap array:"
     "* Let's allocate a 80MB memmap array:"
    ]
    ]
@@ -219,7 +279,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 15,
    "execution_count": 15,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -244,7 +307,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "No significant memory was used in this operation as we just asked the OS to allocate the buffer on the hard drive and just maitain a virtual memory area as a cheap reference to this buffer.\n",
     "No significant memory was used in this operation as we just asked the OS to allocate the buffer on the hard drive and just maitain a virtual memory area as a cheap reference to this buffer.\n",
     "\n",
     "\n",
@@ -255,7 +322,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 17,
    "execution_count": 17,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -275,7 +345,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 18,
    "execution_count": 18,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -295,7 +368,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "* Let's trigger an actual load of the data from the drive into the in-memory disk cache of the OS, this can take some time depending on the speed of the hard drive (on the order of 100MB/s to 300MB/s hence 3s to 8s for this dataset):"
     "* Let's trigger an actual load of the data from the drive into the in-memory disk cache of the OS, this can take some time depending on the speed of the hard drive (on the order of 100MB/s to 300MB/s hence 3s to 8s for this dataset):"
    ]
    ]
@@ -304,7 +381,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 19,
    "execution_count": 19,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -332,7 +412,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "* Now back into memory"
     "* Now back into memory"
    ]
    ]
@@ -341,7 +425,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 20,
    "execution_count": 20,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -369,7 +456,22 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "### Example of practical use of this approach"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "This strategy makes it very interesting to load the readonly datasets of machine learning problems, especially when the same data is reused over and over by concurrent processes as can be the case when doing learning curves analysis or grid search (**Hyperparameter Optimisation** & **Model Selection**).\n",
     "This strategy makes it very interesting to load the readonly datasets of machine learning problems, especially when the same data is reused over and over by concurrent processes as can be the case when doing learning curves analysis or grid search (**Hyperparameter Optimisation** & **Model Selection**).\n",
     "\n",
     "\n",
@@ -378,14 +480,22 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "## Memmaping Nested Numpy-based Data Structures with Joblib"
     "## Memmaping Nested Numpy-based Data Structures with Joblib"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "**joblib** is a utility library included in the **sklearn** package. Among other things it provides tools to serialize objects that comprise large numpy arrays and reload them as memmap backed datastructures.\n",
     "**joblib** is a utility library included in the **sklearn** package. Among other things it provides tools to serialize objects that comprise large numpy arrays and reload them as memmap backed datastructures.\n",
     "\n",
     "\n",
@@ -396,7 +506,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 21,
    "execution_count": 21,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -429,7 +542,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "We can now persist this datastructure to disk:"
     "We can now persist this datastructure to disk:"
    ]
    ]
@@ -438,7 +555,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 22,
    "execution_count": 22,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -463,7 +583,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 23,
    "execution_count": 23,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -482,7 +605,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "A memmapped copy of this datastructure can then be loaded:"
     "A memmapped copy of this datastructure can then be loaded:"
    ]
    ]
@@ -491,7 +618,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 24,
    "execution_count": 24,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -517,6 +647,7 @@
   }
   }
  ],
  ],
  "metadata": {
  "metadata": {
+  "celltoolbar": "Slideshow",
   "kernelspec": {
   "kernelspec": {
    "display_name": "Python 3",
    "display_name": "Python 3",
    "language": "python",
    "language": "python",

+ 73 - 16
06_Numexpr.ipynb

@@ -2,10 +2,23 @@
  "cells": [
  "cells": [
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
+   "source": [
+    "# Numexpr"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
-    "# Numexpr\n",
-    "\n",
     "**Numexpr** is a fast numerical expression evaluator for NumPy. \n",
     "**Numexpr** is a fast numerical expression evaluator for NumPy. \n",
     "\n",
     "\n",
     "With it, expressions that operate on arrays (like `3*a+4*b`) are accelerated and use less memory than doing the same calculation in Python.\n",
     "With it, expressions that operate on arrays (like `3*a+4*b`) are accelerated and use less memory than doing the same calculation in Python.\n",
@@ -19,7 +32,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "## Some Examples \n",
     "## Some Examples \n",
     "\n",
     "\n",
@@ -30,7 +47,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 1,
    "execution_count": 1,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -42,7 +62,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 2,
    "execution_count": 2,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -54,7 +77,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 3,
    "execution_count": 3,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -77,7 +103,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 4,
    "execution_count": 4,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -99,7 +128,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 5,
    "execution_count": 5,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -120,7 +152,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "## Time Comparison with Numpy"
     "## Time Comparison with Numpy"
    ]
    ]
@@ -129,7 +165,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 8,
    "execution_count": 8,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -148,7 +187,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 9,
    "execution_count": 9,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -167,7 +209,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 10,
    "execution_count": 10,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -186,7 +231,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 12,
    "execution_count": 12,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -203,7 +251,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "### (some) preliminary conclusions\n",
     "### (some) preliminary conclusions\n",
     "\n",
     "\n",
@@ -214,7 +266,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "# NumExpr supported Datatypes\n",
     "# NumExpr supported Datatypes\n",
     "\n",
     "\n",
@@ -229,6 +285,7 @@
   }
   }
  ],
  ],
  "metadata": {
  "metadata": {
+  "celltoolbar": "Slideshow",
   "kernelspec": {
   "kernelspec": {
    "display_name": "Python 3",
    "display_name": "Python 3",
    "language": "python",
    "language": "python",

+ 248 - 56
07_0_MachineLearning_Data.ipynb

@@ -2,14 +2,22 @@
  "cells": [
  "cells": [
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "# Machine Learning (and Numpy Arrays)"
     "# Machine Learning (and Numpy Arrays)"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Machine Learning is about building programs with **tunable parameters** (typically an\n",
     "Machine Learning is about building programs with **tunable parameters** (typically an\n",
     "array of floating point values) that are adjusted automatically so as to improve\n",
     "array of floating point values) that are adjusted automatically so as to improve\n",
@@ -25,14 +33,22 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "## *Data* for Machine Learning Algorithms"
     "## *Data* for Machine Learning Algorithms"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Data in machine learning algorithms, with very few exceptions, is assumed to be stored as a\n",
     "Data in machine learning algorithms, with very few exceptions, is assumed to be stored as a\n",
     "**two-dimensional array**, of size `[n_samples, n_features]`.\n",
     "**two-dimensional array**, of size `[n_samples, n_features]`.\n",
@@ -58,7 +74,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "### Addendum\n",
     "### Addendum\n",
     "\n",
     "\n",
@@ -67,7 +87,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "## A Simple Example: the Iris Dataset"
     "## A Simple Example: the Iris Dataset"
    ]
    ]
@@ -76,7 +100,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 2,
    "execution_count": 2,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -147,7 +174,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "- Features in the Iris dataset:\n",
     "- Features in the Iris dataset:\n",
     "\n",
     "\n",
@@ -167,7 +198,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 47,
    "execution_count": 47,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -177,7 +211,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Try by yourself one of the following commands where *'d'* is the variable containing the dataset:\n",
     "Try by yourself one of the following commands where *'d'* is the variable containing the dataset:\n",
     "\n",
     "\n",
@@ -193,7 +231,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 48,
    "execution_count": 48,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -212,7 +253,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 49,
    "execution_count": 49,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "skip"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -290,7 +334,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 50,
    "execution_count": 50,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -309,7 +356,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 51,
    "execution_count": 51,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -327,7 +377,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "## Spatial and Clustering Analysis\n",
     "## Spatial and Clustering Analysis\n",
     "\n",
     "\n",
@@ -337,35 +391,55 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "<img src=\"images/cluster_0.png\">"
     "<img src=\"images/cluster_0.png\">"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "<img src=\"images/cluster_1.png\">"
     "<img src=\"images/cluster_1.png\">"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "<img src=\"images/modeling_data_flow.png\">"
     "<img src=\"images/modeling_data_flow.png\">"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "## Machine Learning with SciPy"
     "## Machine Learning with SciPy"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "**SciPy** provides a spatial analysis class (`scipy.spatial`) and a cluster analysis class (`scipy.cluster`). \n",
     "**SciPy** provides a spatial analysis class (`scipy.spatial`) and a cluster analysis class (`scipy.cluster`). \n",
     "\n",
     "\n",
@@ -385,7 +459,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "### Simple Example"
     "### Simple Example"
    ]
    ]
@@ -394,7 +472,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 11,
    "execution_count": 11,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -406,7 +487,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 12,
    "execution_count": 12,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -420,7 +504,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 13,
    "execution_count": 13,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -432,7 +519,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 14,
    "execution_count": 14,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -444,7 +534,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 15,
    "execution_count": 15,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -458,7 +551,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 16,
    "execution_count": 16,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -472,7 +568,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 100,
    "execution_count": 100,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "skip"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -483,7 +582,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 102,
    "execution_count": 102,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -494,7 +596,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 105,
    "execution_count": 105,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -515,7 +620,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "### Iris Example"
     "### Iris Example"
    ]
    ]
@@ -524,7 +633,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 52,
    "execution_count": 52,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -549,7 +661,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 53,
    "execution_count": 53,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -577,7 +692,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 91,
    "execution_count": 91,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -597,7 +715,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 92,
    "execution_count": 92,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -609,7 +730,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 93,
    "execution_count": 93,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -623,7 +747,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 94,
    "execution_count": 94,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -642,7 +769,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 95,
    "execution_count": 95,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -653,7 +783,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 96,
    "execution_count": 96,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -665,7 +798,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 97,
    "execution_count": 97,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -676,7 +812,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 98,
    "execution_count": 98,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -689,7 +828,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 106,
    "execution_count": 106,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -710,14 +852,22 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "## Note about `kmeans` in `scipy.cluster`"
     "## Note about `kmeans` in `scipy.cluster`"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "In `scipy.cluster` we have **two** routines to divide data into clusters using the **k-means technique**:\n",
     "In `scipy.cluster` we have **two** routines to divide data into clusters using the **k-means technique**:\n",
     "\n",
     "\n",
@@ -755,14 +905,22 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "## Machine Learning with scikit-learn"
     "## Machine Learning with scikit-learn"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "### What is scikit-learn?\n",
     "### What is scikit-learn?\n",
     "\n",
     "\n",
@@ -773,7 +931,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 107,
    "execution_count": 107,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -783,7 +944,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "### Plotting the (randomly generated) data\n",
     "### Plotting the (randomly generated) data\n",
     "\n",
     "\n",
@@ -794,7 +959,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 110,
    "execution_count": 110,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -830,7 +998,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Now we can use **KMeans** to find the centers of these clusters.\n",
     "Now we can use **KMeans** to find the centers of these clusters.\n",
     "\n",
     "\n",
@@ -841,7 +1013,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 111,
    "execution_count": 111,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -869,7 +1044,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 113,
    "execution_count": 113,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -899,7 +1077,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 114,
    "execution_count": 114,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -922,7 +1103,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 116,
    "execution_count": 116,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -946,7 +1130,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "The `transform` function is quite useful in the sense that it will output the distance between\n",
     "The `transform` function is quite useful in the sense that it will output the distance between\n",
     "each point and centroid:"
     "each point and centroid:"
@@ -956,7 +1144,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 118,
    "execution_count": 118,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "fragment"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -980,6 +1171,7 @@
   }
   }
  ],
  ],
  "metadata": {
  "metadata": {
+  "celltoolbar": "Slideshow",
   "kernelspec": {
   "kernelspec": {
    "display_name": "Python 3",
    "display_name": "Python 3",
    "language": "python",
    "language": "python",

+ 43 - 9
07_1_Sparse_Matrices.ipynb

@@ -24,7 +24,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "**Sparse Matrices** are very nice in some situations.  \n",
     "**Sparse Matrices** are very nice in some situations.  \n",
     "\n",
     "\n",
@@ -40,7 +44,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 2,
    "execution_count": 2,
    "metadata": {
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "slideshow": {
+     "slide_type": "skip"
+    }
    },
    },
    "outputs": [],
    "outputs": [],
    "source": [
    "source": [
@@ -336,7 +343,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "## CSC - Compressed Sparse Column\n",
     "## CSC - Compressed Sparse Column\n",
     "\n",
     "\n",
@@ -354,7 +365,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "### BSR - Block Sparse Row\n",
     "### BSR - Block Sparse Row\n",
     "\n",
     "\n",
@@ -371,7 +386,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 12,
    "execution_count": 12,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -401,7 +419,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "## COO - Coordinate Sparse Matrix\n",
     "## COO - Coordinate Sparse Matrix\n",
     "\n",
     "\n",
@@ -426,7 +448,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "## DOK - Dictionary of Keys\n",
     "## DOK - Dictionary of Keys\n",
     "\n",
     "\n",
@@ -439,7 +465,10 @@
    "cell_type": "code",
    "cell_type": "code",
    "execution_count": 15,
    "execution_count": 15,
    "metadata": {
    "metadata": {
-    "collapsed": false
+    "collapsed": false,
+    "slideshow": {
+     "slide_type": "subslide"
+    }
    },
    },
    "outputs": [
    "outputs": [
     {
     {
@@ -469,7 +498,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "The ``scipy.sparse`` submodule also has a lot of functions for sparse matrices\n",
     "The ``scipy.sparse`` submodule also has a lot of functions for sparse matrices\n",
     "including linear algebra, sparse solvers, graph algorithms, and much more."
     "including linear algebra, sparse solvers, graph algorithms, and much more."
@@ -477,6 +510,7 @@
   }
   }
  ],
  ],
  "metadata": {
  "metadata": {
+  "celltoolbar": "Slideshow",
   "kernelspec": {
   "kernelspec": {
    "display_name": "Python 3",
    "display_name": "Python 3",
    "language": "python",
    "language": "python",

+ 26 - 5
08_A_look_at_the_future.ipynb

@@ -2,14 +2,22 @@
  "cells": [
  "cells": [
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "slide"
+    }
+   },
    "source": [
    "source": [
     "# The future of Numpy"
     "# The future of Numpy"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "The future of NumPy is **Blaze**, a new open source Python numerical library. \n",
     "The future of NumPy is **Blaze**, a new open source Python numerical library. \n",
     "\n",
     "\n",
@@ -26,14 +34,22 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "**Blaze Project**: [http://blaze.pydata.org/]()"
     "**Blaze Project**: [http://blaze.pydata.org/]()"
    ]
    ]
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "fragment"
+    }
+   },
    "source": [
    "source": [
     "Blaze is centered around **general multidimensional array** and **table abstractions**. \n",
     "Blaze is centered around **general multidimensional array** and **table abstractions**. \n",
     "\n",
     "\n",
@@ -44,7 +60,11 @@
   },
   },
   {
   {
    "cell_type": "markdown",
    "cell_type": "markdown",
-   "metadata": {},
+   "metadata": {
+    "slideshow": {
+     "slide_type": "subslide"
+    }
+   },
    "source": [
    "source": [
     "Blaze extends NumPy to provide custom-defined data types and heterogeneous shapes. \n",
     "Blaze extends NumPy to provide custom-defined data types and heterogeneous shapes. \n",
     "\n",
     "\n",
@@ -60,6 +80,7 @@
   }
   }
  ],
  ],
  "metadata": {
  "metadata": {
+  "celltoolbar": "Slideshow",
   "kernelspec": {
   "kernelspec": {
    "display_name": "Python 3",
    "display_name": "Python 3",
    "language": "python",
    "language": "python",