{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Support for dask arrays\n", "\n", "It is possible to operate on dask arrays and spare the memory (or perhaps even time)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Necessary imports\n", "import dask\n", "import dask.multiprocessing\n", "import physt\n", "import numpy as np\n", "\n", "import dask.array as da\n", "from physt import h1, h2\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create two arrays\n", "np.random.seed(42)\n", "\n", "SIZE = 2 ** 21\n", "CHUNK = int(SIZE / 16)\n", "\n", "million = np.random.rand(SIZE)#.astype(int)\n", "million2 = (3 * million + np.random.normal(0., 0.3, SIZE))#.astype(int)\n", "\n", "# Chunk them for dask\n", "chunked = da.from_array(million, chunks=(CHUNK))\n", "chunked2 = da.from_array(million2, chunks=(CHUNK))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create histograms\n", "\n", "`h1`, `h2`, ... have their alternatives in `physt.dask_compat`. They should work similarly. Although, they are not complete and unexpected errors may occur." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from physt.compat.dask import h1 as d1\n", "from physt.compat.dask import h2 as d2" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Check: True\n" ] }, { "data": { "text/plain": [ "Histogram1D(bins=(28,), total=2097152, dtype=int64)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFdtJREFUeJzt3X+MXeWd3/H3p3aWkI0gBlxKbae2irWVibqb5crxNlIV\nLVtws1FMK4pcNYvbWqAK2marSBHe/oGa/BPUatkiFSQrpBg2Aiw2FdZWlHUhEv8Uk3F+LBhCGS0l\n2DXYi1nYbSV2Tb794z7TvZ4YBs/1zH1m5v2Sjubc73mec59zZd/PnHOfOTdVhSRJvfkrkx6AJEln\nY0BJkrpkQEmSumRASZK6ZEBJkrpkQEmSumRASZK6ZEBJkrpkQEmSurR60gM43y677LLauHHjpIch\nSXofhw8f/uOqWjtXu2UXUBs3bmRqamrSw5AkvY8kr36Ydl7ikyR1yYCSJHXJgJIkdcmAkiR1yYCS\nJHXJgJIkdcmAkiR1yYCSJHXJgJIkdcmAkiR1yYCSJHXJgJIkdcmAkiR1yYCSJHXJgJIkdcmAkiR1\nyYCSJHXJgJIkdWnOgEryrSQnkjx/lm1fSVJJLhup7UkyneSlJNeN1K9O8lzbdneStPoFSR5p9UNJ\nNo702ZXk5bbsGvdgJUlLx4c5g7of2D67mGQDcC3wk5HaFmAncFXrc0+SVW3zvcDNwOa2zOxzN/BW\nVV0J3AXc2fZ1CXAH8BlgK3BHkjXndniSpKVqzoCqqqeBU2fZdBfwVaBGajuAh6vq3ap6BZgGtia5\nArioqp6pqgIeAK4f6bOvrT8KXNPOrq4DDlbVqap6CzjIWYJSWu6Sc1+k5WD1fDol2QEcq6of5cz/\nDeuAZ0YeH221v2jrs+szfV4DqKrTSd4GLh2tn6XP7PHcAtwC8MlPfnI+hySds56DYD5jq5q7zaSe\nRyvTOQdUko8Bv8Xw8l4XqmovsBdgMBj4z1/z0nPgLIaVfvzqz3xm8f1NYBPwoyT/C1gPfD/JXwOO\nARtG2q5vtWNtfXad0T5JVgMXA29+wL6kOXlZTFr6zjmgquq5qvqrVbWxqjYyvPT2y1X1OnAA2Nlm\n5m1iOBni2ao6DryTZFv7fOkm4LG2ywPAzAy9G4Cn2udUTwDXJlnTJkdc22qSljB/edCHNeclviQP\nAZ8DLktyFLijqu47W9uqOpJkP/ACcBq4rarea5tvZTgj8ELg8bYA3Ac8mGSa4WSMnW1fp5J8Hfhe\na/e1qjrbZA1J0jKUWmafWA4Gg5qampr0MDRh/ta9vCyzt6kVL8nhqhrM1c47SUiSumRASZK6ZEBJ\nkrpkQEmSumRASZK6NK9bHUmLyRl50spkQEnqnvf8W5m8xCdJ6pIBJUnqkgElSeqSASVJ6pIBJUnq\nkgElSeqSASVJ6pIBJUnqkgElSeqSASVJ6pIBJUnqkgElSeqSASVJ6pIBJUnqkgElSeqSASVJ6tKc\nAZXkW0lOJHl+pPbvk/w4yR8m+S9JPjGybU+S6SQvJblupH51kufatruT4VeQJbkgySOtfijJxpE+\nu5K83JZd5+ugJUn9+zBnUPcD22fVDgKfqqq/DfxPYA9Aki3ATuCq1ueeJKtan3uBm4HNbZnZ527g\nraq6ErgLuLPt6xLgDuAzwFbgjiRrzv0QJUlL0ZwBVVVPA6dm1f6gqk63h88A69v6DuDhqnq3ql4B\npoGtSa4ALqqqZ6qqgAeA60f67GvrjwLXtLOr64CDVXWqqt5iGIqzg1KStEydj8+g/jnweFtfB7w2\nsu1oq61r67PrZ/Rpofc2cOkH7OtnJLklyVSSqZMnT451MJKkPowVUEn+LXAa+Pb5Gc78VNXeqhpU\n1WDt2rWTHIok6TyZd0Al+afAF4B/0i7bARwDNow0W99qx/jLy4Cj9TP6JFkNXAy8+QH7kiStAPMK\nqCTbga8CX6yq/zuy6QCws83M28RwMsSzVXUceCfJtvb50k3AYyN9Zmbo3QA81QLvCeDaJGva5Ihr\nW02StAKsnqtBkoeAzwGXJTnKcGbdHuAC4GCbLf5MVf2LqjqSZD/wAsNLf7dV1XttV7cynBF4IcPP\nrGY+t7oPeDDJNMPJGDsBqupUkq8D32vtvlZVZ0zWkCQtX/nLq3PLw2AwqKmpqUkPQ+9j+PuMtPCW\n2VvbspLkcFUN5mo35xmUJC1F8/llyFDri7c6kiR1yYCSJHXJgJIkdcmAkiR1yYCSJHXJgJIkdcmA\nkiR1yYCSJHXJgJIkdcmAkiR1yYCSJHXJgJIkdcmAkiR1yYCSJHXJgJIkdcmAkiR1yYCSJHXJgJIk\ndcmAkiR1yYCSJHXJgJIkdcmAkiR1ac6ASvKtJCeSPD9SuyTJwSQvt59rRrbtSTKd5KUk143Ur07y\nXNt2d5K0+gVJHmn1Q0k2jvTZ1Z7j5SS7ztdBS5L692HOoO4Hts+q3Q48WVWbgSfbY5JsAXYCV7U+\n9yRZ1frcC9wMbG7LzD53A29V1ZXAXcCdbV+XAHcAnwG2AneMBqEkaXmbM6Cq6mng1KzyDmBfW98H\nXD9Sf7iq3q2qV4BpYGuSK4CLquqZqirggVl9Zvb1KHBNO7u6DjhYVaeq6i3gID8blJKkZWq+n0Fd\nXlXH2/rrwOVtfR3w2ki7o622rq3Prp/Rp6pOA28Dl37Avn5GkluSTCWZOnny5DwPSZLUk7EnSbQz\nojoPYxlnDHuralBVg7Vr105yKJKk82S+AfVGu2xH+3mi1Y8BG0barW+1Y219dv2MPklWAxcDb37A\nviRJK8B8A+oAMDOrbhfw2Eh9Z5uZt4nhZIhn2+XAd5Jsa58v3TSrz8y+bgCeamdlTwDXJlnTJkdc\n22qSpBVg9VwNkjwEfA64LMlRhjPrvgHsT7IbeBW4EaCqjiTZD7wAnAZuq6r32q5uZTgj8ELg8bYA\n3Ac8mGSa4WSMnW1fp5J8Hfhea/e1qpo9WUOStExleLKyfAwGg5qampr0MPQ+hn/9JvVpmb0ddivJ\n4aoazNXOO0lIkrpkQEmSumRASZK6ZEBJkrpkQEmSumRASZK6ZEBJkrpkQEmSumRASZK6ZEBJkrpk\nQEmSumRASZK6ZEBJkro059dtSO/HO5NLWkgGlCQ18/mly6/oWDhe4pMkdcmAkiR1yYCSJHXJgJIk\ndcmAkiR1yYCSJHXJgJIkdWmsgEryb5IcSfJ8koeSfDTJJUkOJnm5/Vwz0n5PkukkLyW5bqR+dZLn\n2ra7k+FfIyS5IMkjrX4oycZxxitJWjrmHVBJ1gH/GhhU1aeAVcBO4HbgyaraDDzZHpNkS9t+FbAd\nuCfJqra7e4Gbgc1t2d7qu4G3qupK4C7gzvmOV5K0tIx7iW81cGGS1cDHgP8N7AD2te37gOvb+g7g\n4ap6t6peAaaBrUmuAC6qqmeqqoAHZvWZ2dejwDUzZ1eSpOVt3gFVVceA/wD8BDgOvF1VfwBcXlXH\nW7PXgcvb+jrgtZFdHG21dW19dv2MPlV1GngbuHS+Y5YkLR3jXOJbw/AMZxPw14GfT/Kl0TbtjGjB\n71SV5JYkU0mmTp48udBPJ0laBONc4vs14JWqOllVfwF8B/g7wBvtsh3t54nW/hiwYaT/+lY71tZn\n18/o0y4jXgy8OXsgVbW3qgZVNVi7du0YhyRJ6sU4AfUTYFuSj7XPha4BXgQOALtam13AY239ALCz\nzczbxHAyxLPtcuA7Sba1/dw0q8/Mvm4AnmpnZZKkZW7eX7dRVYeSPAp8HzgN/ADYC3wc2J9kN/Aq\ncGNrfyTJfuCF1v62qnqv7e5W4H7gQuDxtgDcBzyYZBo4xXAWoCRpBchyOyEZDAY1NTU16WGsCM6n\nlPw+qPlIcriqBnO1804SkqQuGVCSpC4ZUJKkLhlQkqQuGVCSpC4ZUJKkLhlQkqQuGVCSpC4ZUJKk\nLhlQkqQuGVCSpC4ZUJKkLhlQkqQuGVCSpC4ZUJKkLhlQkqQuGVCSpC4ZUJKkLhlQkqQuGVCSpC4Z\nUJKkLhlQkqQuGVCSpC6NFVBJPpHk0SQ/TvJikl9JckmSg0lebj/XjLTfk2Q6yUtJrhupX53kubbt\n7iRp9QuSPNLqh5JsHGe8kqSlY9wzqP8I/Leq+lvALwIvArcDT1bVZuDJ9pgkW4CdwFXAduCeJKva\nfu4FbgY2t2V7q+8G3qqqK4G7gDvHHK8kaYmYd0AluRj4u8B9AFX151X1J8AOYF9rtg+4vq3vAB6u\nqner6hVgGtia5Argoqp6pqoKeGBWn5l9PQpcM3N2JUla3sY5g9oEnAT+c5IfJPlmkp8HLq+q463N\n68DlbX0d8NpI/6Ottq6tz66f0aeqTgNvA5fOHkiSW5JMJZk6efLkGIckSerFOAG1Gvhl4N6q+jTw\nf2iX82a0M6Ia4zk+lKraW1WDqhqsXbt2oZ9OkrQIxgmoo8DRqjrUHj/KMLDeaJftaD9PtO3HgA0j\n/de32rG2Prt+Rp8kq4GLgTfHGLMkaYmYd0BV1evAa0l+oZWuAV4ADgC7Wm0X8FhbPwDsbDPzNjGc\nDPFsuxz4TpJt7fOlm2b1mdnXDcBT7axMkrTMrR6z/78Cvp3k54A/Av4Zw9Dbn2Q38CpwI0BVHUmy\nn2GInQZuq6r32n5uBe4HLgQebwsMJ2A8mGQaOMVwFqAkaQXIcjshGQwGNTU1NelhrAjOp5Rgmb2F\nLookh6tqMFc77yQhSeqSASVJ6pIBJUnqkgElSeqSASVJ6pIBJUnqkgElSerSuH+oq2XCv2mS5mc+\n/3f826kPxzMoSVKXDChJUpcMKElSlwwoSVKXDChJUpcMKElSlwwoSVKXDChJUpcMKElSlwwoSVKX\nDChJUpcMKElSlwwoSVKXDChJUpcMKElSl8YOqCSrkvwgye+3x5ckOZjk5fZzzUjbPUmmk7yU5LqR\n+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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Use chunks to create a 1D histogram\n", "ha = d1(chunked2, \"fixed_width\", 0.2)\n", "check_ha = h1(million2, \"fixed_width\", 0.2)\n", "ok = (ha == check_ha)\n", "print(\"Check: \", ok)\n", "ha.plot()\n", "ha" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Check: True\n" ] }, { "data": { "text/plain": [ "Histogram2D(bins=(5, 28), total=2097152, dtype=int64)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Use chunks to create a 2D histogram\n", "hb = d2(chunked, chunked2, \"fixed_width\", .2, axis_names=[\"x\", \"y\"])\n", "check_hb = h2(million, million2, \"fixed_width\", .2, axis_names=[\"x\", \"y\"])\n", "hb.plot(show_zero=False, cmap=\"rainbow\")\n", "ok = (hb == check_hb)\n", "print(\"Check: \", ok)\n", "hb" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Check: True\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFkZJREFUeJzt3X+s3fV93/Hnq3ZKSCOIAY8y252tYXUy0dqEI8ddpCkq\nHXhpFLOJRp6W4m4WaIJtyRQpwt0faIkmBW0qHdJAsgLD0Chg0UxYnVjqmUj5Z5hc50fBEMZVKcGe\niV1MoN0kUpP3/jifux7fmFx8j+89n3vv8yF9db/n/f1+vufzPbLP636+53O/J1WFJEm9+blJd0CS\npHMxoCRJXTKgJEldMqAkSV0yoCRJXTKgJEldMqAkSV0yoCRJXTKgJEldWj3pDlxoV1xxRW3cuHHS\n3ZAkvYMjR478eVWtnWu/ZRdQGzduZGpqatLdkCS9gyQvv5v9vMQnSeqSASVJ6pIBJUnqkgElSeqS\nASVJ6pIBJUnqkgElSeqSASVJ6pIBJUnqkgElSeqSASVJ6pIBJUnqkgElSeqSASVJ6pIBJUnqkgEl\nSeqSASVJ6tKcAZXkgSQnkzx7jm2fS1JJrhip7UkyneSFJDeM1K9N8kzbdk+StPpFSR5t9cNJNo60\n2ZXkxbbsGvdkJUlLx7sZQT0IbJ9dTLIBuB74wUhtC7ATuKa1uTfJqrb5PuAWYHNbZo65G3i9qq4G\n7gbuase6DLgT+AiwFbgzyZrzOz1J0lI1Z0BV1TeB0+fYdDfweaBGajuAR6rqrap6CZgGtia5Crik\nqp6qqgIeAm4cabOvrT8GXNdGVzcAB6vqdFW9DhzkHEEpLXfJ+S/ScrB6Po2S7ACOV9X3cvb/hnXA\nUyOPj7XaX7X12fWZNq8AVNWZJG8Al4/Wz9Fmdn9uBW4F+KVf+qX5nJJ03noOgvn0rWrufSb1PFqZ\nzjugkrwP+F2Gl/e6UFV7gb0Ag8HAf/7qOjx65Wum3sxnFt/fBjYB30vyZ8B64NtJfhE4DmwY2Xd9\nqx1v67PrjLZJshq4FHjtZxxL0hLmJUu9W+cdUFX1TFX9jaraWFUbGV56+3BVvQocAHa2mXmbGE6G\neLqqTgBvJtnWPl+6GXi8HfIAMDND7ybgyfY51deB65OsaZMjrm81SdIKMOclviRfBT4GXJHkGHBn\nVd1/rn2r6miS/cBzwBng9qp6u22+jeGMwIuBJ9oCcD/wcJJphpMxdrZjnU7yReBbbb8vVNW5JmtI\nkpah1DL7xHIwGNTU1NSku6EJ87LQ8rLM3qZWvCRHqmow137eSUKS1CUDSpLUJQNKktQlA0qS1KV5\n3UlCWkxOeJBWJgNKUve8pdLK5CU+SVKXDChJUpcMKElSlwwoSVKXDChJUpcMKElSlwwoSVKXDChJ\nUpcMKElSlwwoSVKXDChJUpcMKElSlwwoSVKXDChJUpcMKElSl+YMqCQPJDmZ5NmR2n9I8v0kf5Lk\nvyb5wMi2PUmmk7yQ5IaR+rVJnmnb7kmG3/CS5KIkj7b64SQbR9rsSvJiW3ZdqJOWJPXv3YygHgS2\nz6odBD5YVX8X+F/AHoAkW4CdwDWtzb1JVrU29wG3AJvbMnPM3cDrVXU1cDdwVzvWZcCdwEeArcCd\nSdac/ylKkpaiOQOqqr4JnJ5V++OqOtMePgWsb+s7gEeq6q2qegmYBrYmuQq4pKqeqqoCHgJuHGmz\nr60/BlzXRlc3AAer6nRVvc4wFGcHpSRpmboQn0H9c+CJtr4OeGVk27FWW9fWZ9fPatNC7w3g8p9x\nrJ+S5NYkU0mmTp06NdbJSJL6MFZAJfm3wBngKxemO/NTVXuralBVg7Vr106yK5KkC2TeAZXkd4BP\nAP+0XbYDOA5sGNltfasd568vA47Wz2qTZDVwKfDazziWJGkFmFdAJdkOfB74ZFX935FNB4CdbWbe\nJoaTIZ6uqhPAm0m2tc+XbgYeH2kzM0PvJuDJFnhfB65PsqZNjri+1SRJK8DquXZI8lXgY8AVSY4x\nnFm3B7gIONhmiz9VVf+iqo4m2Q88x/DS3+1V9XY71G0MZwRezPAzq5nPre4HHk4yzXAyxk6Aqjqd\n5IvAt9p+X6iqsyZrSJKWr/z11bnlYTAY1NTU1KS7oXcw/H1GWnjL7K1tWUlypKoGc+035whKkpai\n+fwyZKj1xVsdSZK6ZEBJkrpkQEmSumRASZK6ZEBJkrpkQEmSumRASZK6ZEBJkrpkQEmSumRASZK6\nZEBJkrpkQEmSumRASZK6ZEBJkrpkQEmSumRASZK6ZEBJkrpkQEmSumRASZK6ZEBJkro0Z0AleSDJ\nySTPjtQuS3IwyYvt55qRbXuSTCd5IckNI/VrkzzTtt2TJK1+UZJHW/1wko0jbXa153gxya4LddKS\npP69mxHUg8D2WbU7gENVtRk41B6TZAuwE7imtbk3yarW5j7gFmBzW2aOuRt4vaquBu4G7mrHugy4\nE/gIsBW4czQIJUnL25wBVVXfBE7PKu8A9rX1fcCNI/VHquqtqnoJmAa2JrkKuKSqnqqqAh6a1Wbm\nWI8B17XR1Q3Awao6XVWvAwf56aCUJC1T8/0M6sqqOtHWXwWubOvrgFdG9jvWauva+uz6WW2q6gzw\nBnD5zzjWT0lya5KpJFOnTp2a5ylJknoy9iSJNiKqC9CXcfqwt6oGVTVYu3btJLsiSbpA5htQP2yX\n7Wg/T7b6cWDDyH7rW+14W59dP6tNktXApcBrP+NYkqQVYL4BdQCYmVW3C3h8pL6zzczbxHAyxNPt\ncuCbSba1z5duntVm5lg3AU+2UdnXgeuTrGmTI65vNUnSCrB6rh2SfBX4GHBFkmMMZ9Z9CdifZDfw\nMvApgKo6mmQ/8BxwBri9qt5uh7qN4YzAi4En2gJwP/BwkmmGkzF2tmOdTvJF4Fttvy9U1ezJGpKk\nZSrDwcryMRgMampqatLd0DsY/vWb1Kdl9nbYrSRHqmow137eSUKS1CUDSpLUJQNKktQlA0qS1CUD\nSpLUJQNKktQlA0qS1CUDSpLUJQNKktQlA0qS1CUDSpLUJQNKktSlOe9mLr0Tb/wqaSEZUJLUzOeX\nLu+AvnC8xCdJ6pIBJUnqkgElSeqSASVJ6pIBJUnqkgElSeqSASVJ6tJYAZXk3yQ5muTZJF9N8t4k\nlyU5mOTF9nPNyP57kkwneSHJDSP1a5M807bdkwz/GiHJRUkebfXDSTaO019J0tIx74BKsg7418Cg\nqj4IrAJ2AncAh6pqM3CoPSbJlrb9GmA7cG+SVe1w9wG3AJvbsr3VdwOvV9XVwN3AXfPtryRpaRn3\nEt9q4OIkq4H3Af8b2AHsa9v3ATe29R3AI1X1VlW9BEwDW5NcBVxSVU9VVQEPzWozc6zHgOtmRleS\npOVt3gFVVceB/wj8ADgBvFFVfwxcWVUn2m6vAle29XXAKyOHONZq69r67PpZbarqDPAGcPnsviS5\nNclUkqlTp07N95QkSR0Z5xLfGoYjnE3A3wR+IcmnR/dpI6IFv1NVVe2tqkFVDdauXbvQTydJWgTj\nXOL7DeClqjpVVX8FfA34e8AP22U72s+Tbf/jwIaR9utb7Xhbn10/q027jHgp8NoYfZYkLRHjBNQP\ngG1J3tc+F7oOeB44AOxq++wCHm/rB4CdbWbeJoaTIZ5ulwPfTLKtHefmWW1mjnUT8GQblUmSlrl5\nf91GVR1O8hjwbeAM8B1gL/B+YH+S3cDLwKfa/keT7Aeea/vfXlVvt8PdBjwIXAw80RaA+4GHk0wD\npxnOApQkrQBZbgOSwWBQU1NTk+7GiuB8Ssnvg5qPJEeqajDXft5JQpLUJQNKktQlA0qS1CUDSpLU\nJQNKktQlA0qS1CUDSpLUJQNKktQlA0qS1CUDSpLUJQNKktQlA0qS1CUDSpLUJQNKktQlA0qS1CUD\nSpLUJQNKktQlA0qS1CUDSpLUJQNKktQlA0qS1KWxAirJB5I8luT7SZ5P8mtJLktyMMmL7eeakf33\nJJlO8kKSG0bq1yZ5pm27J0la/aIkj7b64SQbx+mvJGnpGHcE9Z+A/15Vfwf4FeB54A7gUFVtBg61\nxyTZAuwErgG2A/cmWdWOcx9wC7C5LdtbfTfwelVdDdwN3DVmfyVJS8S8AyrJpcDfB+4HqKofV9WP\ngB3AvrbbPuDGtr4DeKSq3qqql4BpYGuSq4BLquqpqirgoVltZo71GHDdzOhKkrS8jTOC2gScAv5L\nku8k+XKSXwCurKoTbZ9XgSvb+jrglZH2x1ptXVufXT+rTVWdAd4ALp/dkSS3JplKMnXq1KkxTkmS\n1ItxAmo18GHgvqr6EPB/aJfzZrQRUY3xHO9KVe2tqkFVDdauXbvQTydJWgTjBNQx4FhVHW6PH2MY\nWD9sl+1oP0+27ceBDSPt17fa8bY+u35WmySrgUuB18bosyRpiZh3QFXVq8ArSX65la4DngMOALta\nbRfweFs/AOxsM/M2MZwM8XS7HPhmkm3t86WbZ7WZOdZNwJNtVCZJWuZWj9n+XwFfSfLzwJ8C/4xh\n6O1Psht4GfgUQFUdTbKfYYidAW6vqrfbcW4DHgQuBp5oCwwnYDycZBo4zXAWoCRpBchyG5AMBoOa\nmpqadDdWBOdTSrDM3kIXRZIjVTWYaz/vJCFJ6pIBJUnqkgElSeqSASVJ6pIBJUnqkgElSerSuH8H\npWXCKePS/Mzn/45T098dR1CSpC4ZUJKkLhlQkqQuGVCSpC4ZUJKkLhlQkqQuGVCSpC4ZUJKkLhlQ\nkqQuGVCSpC4ZUJKkLhlQkqQuGVCSpC4ZUJKkLo0dUElWJflOkj9qjy9LcjDJi+3nmpF99ySZTvJC\nkhtG6tcmeaZtuycZ3sA+yUVJHm31w0k2jttfSdLScCFGUJ8Bnh95fAdwqKo2A4faY5JsAXYC1wDb\ngXuTrGpt7gNuATa3ZXur7wZer6qrgbuBuy5AfyVJS8BYAZVkPfCbwJdHyjuAfW19H3DjSP2Rqnqr\nql4CpoGtSa4CLqmqp6qqgIdmtZk51mPAdTOjK0nS8jbuCOr3gc8DPxmpXVlVJ9r6q8CVbX0d8MrI\nfsdabV1bn10/q01VnQHeAC6f3YkktyaZSjJ16tSpsU5IktSHeQdUkk8AJ6vqyDvt00ZEC/7lxlW1\nt6oGVTVYu3btQj+dJGkRrB6j7UeBTyb5OPBe4JIkfwD8MMlVVXWiXb472fY/DmwYab++1Y639dn1\n0TbHkqwGLgVeG6PPkqQlYt4jqKraU1Xrq2ojw8kPT1bVp4EDwK622y7g8bZ+ANjZZuZtYjgZ4ul2\nOfDNJNva50s3z2ozc6yb2nMs+IhMkjR544yg3smXgP1JdgMvA58CqKqjSfYDzwFngNur6u3W5jbg\nQeBi4Im2ANwPPJxkGjjNMAglSStAltuAZDAY1NTU1KS7seQ4N1JaPMvsbfe8JTlSVYO59vNOEpKk\nLhlQkqQuGVCSpC4ZUJKkLhlQkqQuGVCSpC4ZUJKkLhlQkqQuGVCSpC4ZUJKkLhlQkqQuGVCSpC4Z\nUJKkLhlQkqQuGVCSpC4ZUJKkLhlQkqQuGVCSpC4ZUJKkLq2edAckaaVJzm//qoXpR+8MqGXofP/x\nS1KP5n2JL8mGJN9I8lySo0k+0+qXJTmY5MX2c81Imz1JppO8kOSGkfq1SZ5p2+5Jhm+xSS5K8mir\nH06ycf6nKklaSsb5DOoM8Lmq2gJsA25PsgW4AzhUVZuBQ+0xbdtO4BpgO3BvklXtWPcBtwCb27K9\n1XcDr1fV1cDdwF1j9FeStITMO6Cq6kRVfbut/wXwPLAO2AHsa7vtA25s6zuAR6rqrap6CZgGtia5\nCrikqp6qqgIemtVm5liPAdfNjK4kScvbBZnF1y69fQg4DFxZVSfapleBK9v6OuCVkWbHWm1dW59d\nP6tNVZ0B3gAuP8fz35pkKsnUqVOnLsAZSZImbeyASvJ+4A+Bz1bVm6Pb2ohoweefVNXeqhpU1WDt\n2rUL/XSSpEUwVkAleQ/DcPpKVX2tlX/YLtvRfp5s9ePAhpHm61vteFufXT+rTZLVwKXAa+P0WZK0\nNIwziy/A/cDzVfV7I5sOALva+i7g8ZH6zjYzbxPDyRBPt8uBbybZ1o5586w2M8e6CXiyjcokScvc\nOH8H9VHgt4Fnkny31X4X+BKwP8lu4GXgUwBVdTTJfuA5hjMAb6+qt1u724AHgYuBJ9oCwwB8OMk0\ncJrhLEBJ0gqQ5TYgGQwGNTU1NeluTJTzHKXlZZm9TZPkSFUN5trPe/FJkrpkQEmSumRASZK6ZEBJ\nkrpkQEmSumRASZK6ZEBJkrpkQEmSumRASZK6ZEBJkrpkQEmSumRASZK6ZEBJkro0ztdtaBF4Z3JJ\n83kfWA53QHcEJUnqkgElSeqSASVJ6pIBJUnqkgElSeqSASVJ6pIBJUnq0pIIqCTbk7yQZDrJHZPu\njyT1Ljn/pTfdB1SSVcB/Bv4hsAX4J0m2TLZX87Mc/sFI0mJZCneS2ApMV9WfAiR5BNgBPDfJThke\nkpab3u5YsRQCah3wysjjY8BHRndIcitwa3v4l0leWIR+XQH8+SI8T89W+muw0s8ffA1ghb8GybzO\n/2+9m52WQkDNqar2AnsX8zmTTFXVYDGfszcr/TVY6ecPvgbga7CQ59/9Z1DAcWDDyOP1rSZJWsaW\nQkB9C9icZFOSnwd2Agcm3CdJ0gLr/hJfVZ1J8i+BrwOrgAeq6uiEuwWLfEmxUyv9NVjp5w++BuBr\nsGDnn1oOXxoiSVp2lsIlPknSCmRASZK6ZECNIclvJTma5CdJVsw005V+66kkDyQ5meTZSfdlUpJs\nSPKNJM+1/wOfmXSfFlOS9yZ5Osn32vn/u0n3aRKSrErynSR/tBDHN6DG8yzwj4FvTroji2U53Xpq\nDA8C2yfdiQk7A3yuqrYA24DbV9i/g7eAX6+qXwF+FdieZNuE+zQJnwGeX6iDG1BjqKrnq2ox7lrR\nk/9/66mq+jEwc+upFaOqvgmcnnQ/JqmqTlTVt9v6XzB8k1o32V4tnhr6y/bwPW1ZUTPOkqwHfhP4\n8kI9hwGl83WuW0+tmDcm/bQkG4EPAYcn25PF1S5vfRc4CRysqhV1/sDvA58HfrJQT2BAzSHJ/0jy\n7DmWFTVqkM4lyfuBPwQ+W1VvTro/i6mq3q6qX2V4d5utST446T4tliSfAE5W1ZGFfJ7u/1B30qrq\nNybdh8546ykBkOQ9DMPpK1X1tUn3Z1Kq6kdJvsHwc8mVMnHmo8Ank3wceC9wSZI/qKpPX8gncQSl\n8+Wtp0SSAPcDz1fV7026P4stydokH2jrFwP/APj+ZHu1eKpqT1Wtr6qNDN8DnrzQ4QQG1FiS/KMk\nx4BfA/5bkq9Puk8LrarOADO3nnoe2N/JracWTZKvAv8T+OUkx5LsnnSfJuCjwG8Dv57ku235+KQ7\ntYiuAr6R5E8Y/tJ2sKoWZKr1SuatjiRJXXIEJUnqkgElSeqSASVJ6pIBJUnqkgElSeqSASVJ6pIB\nJUnqkgEldSrJF5J8duTxv19p37uklc0/1JU61e4S/rWq+nCSnwNeBLZW1WsT7Zi0SLxZrNSpqvqz\nJK8l+RBwJfAdw0kriQEl9e3LwO8Avwg8MNmuSIvLS3xSx9od459h+I2tm6vq7Ql3SVo0jqCkjlXV\nj9t3Df3IcNJKY0BJHWuTI7YBvzXpvkiLzWnmUqeSbAGmgUNV9eKk+yMtNj+DkiR1yRGUJKlLBpQk\nqUsGlCSpSwaUJKlLBpQkqUv/DxDzONb6DQSBAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# And another cross-check\n", "hh = hb.projection(\"y\")\n", "hh.plot()\n", "print(\"Check: \", np.array_equal(hh.frequencies, ha.frequencies)) # Just frequencies" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Use dask for normal arrays (will automatically split array to chunks)\n", "d1(million2, \"fixed_width\", 0.2) == ha" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Some timings\n", "\n", "Your results may vary substantially. These numbers are just for illustration, on 4-core (8-thread) machine. The real gain comes when we have data that don't fit into memory." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Efficiency" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 1.13 s, sys: 28.7 ms, total: 1.16 s\n", "Wall time: 1.16 s\n" ] }, { "data": { "text/plain": [ "Histogram1D(bins=(28,), total=2097152, dtype=int64)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Standard\n", "%time h1(million2, \"fixed_width\", 0.2)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 807 ms, sys: 4.29 ms, total: 812 ms\n", "Wall time: 212 ms\n" ] }, { "data": { "text/plain": [ "Histogram1D(bins=(28,), total=2097152, dtype=int64)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Same array, but using dask\n", "%time d1(million2, \"fixed_width\", 0.2)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 777 ms, sys: 9.89 ms, total: 787 ms\n", "Wall time: 178 ms\n" ] }, { "data": { "text/plain": [ "Histogram1D(bins=(28,), total=2097152, dtype=int64)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Most efficient: dask with already chunked data\n", "%time d1(chunked2, \"fixed_width\", 0.2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Different scheduling" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 751 ms, sys: 9.9 ms, total: 761 ms\n", "Wall time: 173 ms\n" ] }, { "data": { "text/plain": [ "Histogram1D(bins=(28,), total=2097152, dtype=int64)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time d1(chunked2, \"fixed_width\", 0.2)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 560 ms, sys: 14.3 ms, total: 574 ms\n", "Wall time: 183 ms\n" ] } ], "source": [ "%%time\n", "# Hyper-threading or not?\n", "graph, name = d1(chunked2, \"fixed_width\", 0.2, compute=False)\n", "dask.threaded.get(graph, name, num_workers=4)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 677 ms, sys: 589 ms, total: 1.27 s\n", "Wall time: 4.69 s\n" ] }, { "data": { "text/plain": [ "Histogram1D(bins=(28,), total=2097152, dtype=int64)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Multiprocessing not so efficient for small arrays?\n", "%time d1(chunked2, \"fixed_width\", 0.2, dask_method=dask.multiprocessing.get)" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [conda root]", "language": "python", "name": "conda-root-py" }, "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.2" } }, "nbformat": 4, "nbformat_minor": 0 }