{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Thinking with Scans\n", "\n", "Exercise:\n", "\n", "* Assume you have a bag of points $x_i\\in[0,1]^2$\n", "* Work out how to sort them by quadrants, using four scans (one for each quadrant, realized as `numpy.cumsum`) and otherwise only local (elementwise) operations.\n", "* Do this using `numpy`, no need to use PyOpenCL" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as pt" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x = np.random.rand(1000, 2)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "right = x[:,0] >= 0.5\n", "top = x[:,1] >= 0.5" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "bl = ((~top) & (~right))\n", "tl = ((top) & (~right))\n", "br = ((~top) & (right))\n", "tr = ((top) & (right))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "bl_idx = -1 + np.cumsum(bl.astype(np.int32))\n", "tl_idx = bl_idx[-1] + np.cumsum(tl.astype(np.int32))\n", "br_idx = tl_idx[-1] + np.cumsum(br.astype(np.int32))\n", "tr_idx = br_idx[-1] + np.cumsum(tr.astype(np.int32))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x_new = np.empty_like(x)\n", "x_new[bl_idx[bl]] = x[bl]\n", "x_new[tl_idx[tl]] = x[tl]\n", "x_new[br_idx[br]] = x[br]\n", "x_new[tr_idx[tr]] = x[tr]" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nxWKx9GH+D86Y1F1L1jClAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pt.axis(\"equal\")\n", "\n", "pt.plot(x[:,0], x[:,1], \"x\")\n", "last_bl = bl_idx[-1]\n", "pt.plot(x_new[:last_bl,0], x_new[:last_bl,1], \"v\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1+" } }, "nbformat": 4, "nbformat_minor": 0 }