{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# repmat" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An alternative implementation of `repmat` using the new in-place tools." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ ":ext FlexibleContexts\n", "\n", "import Numeric.LinearAlgebra\n", "import Numeric.LinearAlgebra.Devel" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "m = (3><4)[1..] :: Matrix Z" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(3><4)\n", " [ 1, 2, 3, 4\n", " , 5, 6, 7, 8\n", " , 9, 10, 11, 12 ]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import Control.Monad.ST" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "rpmt m i j = runST $ do\n", " x <- newUndefinedMatrix RowMajor dr dc\n", " sequence_ [ setMatrix x a b m | a <- [0,r..dr], b <-[0,c..dc] ]\n", " unsafeFreezeMatrix x\n", " where\n", " (r,c) = size m\n", " dr = i*r\n", " dc = j*c" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(6><12)\n", " [ 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4\n", " , 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8\n", " , 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12\n", " , 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4\n", " , 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8\n", " , 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12 ]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "rpmt m 2 3" ] } ], "metadata": { "kernelspec": { "display_name": "Haskell", "language": "haskell", "name": "haskell" }, "language_info": { "codemirror_mode": "ihaskell", "file_extension": ".hs", "name": "haskell", "version": "7.10.1" } }, "nbformat": 4, "nbformat_minor": 0 }