Skip to content

Instantly share code, notes, and snippets.

@ev-br
Last active January 2, 2016 05:59
Show Gist options
  • Save ev-br/8260758 to your computer and use it in GitHub Desktop.
Save ev-br/8260758 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:fd02b9d0b85cd00e605e1aff17a704008881f391e52c6b187d68837bcb8c1765"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"from scipy.interpolate import splev, splder, BSpline"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def make_random_spline(n=35, k=3):\n",
" np.random.seed(123)\n",
" t = np.sort(np.random.random(n+k+1))\n",
" c = np.random.random(n)\n",
" return BSpline(t, c, k)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from scipy import __version__\n",
"print __version__ "
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"0.15.0.dev-4d74f29\n"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Fix the number of knots and vary the length of the input"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"for numknots in [50, 500, 5000]:\n",
" b = make_random_spline(n=numknots, k=3)\n",
" tck = (b.t, b.c, b.k)\n",
" dt = b.t[-1] - b.t[0]\n",
" print \"\\n============== numknots = \", numknots\n",
" \n",
" for N in [1, 100, 1000, 20000]:\n",
" xp = dt * np.random.random(N) + b.t[0]\n",
"\n",
" print \"N = \", N\n",
" %timeit splev(xp, tck)\n",
" %timeit b(xp)\n",
" print \"--------\\n\""
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"============== numknots = 50\n",
"N = 1\n",
"100000 loops, best of 3: 10.6 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10000 loops, best of 3: 25.4 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 100\n",
"100000 loops, best of 3: 19.9 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10000 loops, best of 3: 35.5 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 1000\n",
"10000 loops, best of 3: 106 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10000 loops, best of 3: 134 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 20000\n",
"1000 loops, best of 3: 1.93 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"100 loops, best of 3: 2.16 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"\n",
"============== numknots = 500\n",
"N = 1\n",
"100000 loops, best of 3: 11.2 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10000 loops, best of 3: 29.5 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 100\n",
"10000 loops, best of 3: 41.5 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10000 loops, best of 3: 48.9 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 1000\n",
"1000 loops, best of 3: 303 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1000 loops, best of 3: 249 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 20000\n",
"100 loops, best of 3: 5.67 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"100 loops, best of 3: 4.37 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"\n",
"============== numknots = 5000\n",
"N = 1\n",
"100000 loops, best of 3: 12 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10000 loops, best of 3: 29.2 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 100\n",
"1000 loops, best of 3: 200 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10000 loops, best of 3: 144 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 1000\n",
"100 loops, best of 3: 2.05 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1000 loops, best of 3: 1.29 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 20000\n",
"10 loops, best of 3: 42.8 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10 loops, best of 3: 26.4 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n"
]
}
],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from scipy.interpolate._bspl import evaluate_spline\n",
"from numpy.testing import assert_allclose"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"for numknots in [50, 500, 5000]:\n",
" b = make_random_spline(n=numknots, k=3)\n",
" tck = (b.t, b.c, b.k)\n",
" dt = b.t[-1] - b.t[0]\n",
" print \"\\n============== numknots = \", numknots\n",
" \n",
" for N in [1, 100, 1000, 20000]:\n",
" xp = dt * np.random.random(N) + b.t[0]\n",
"\n",
" print \"N = \", N\n",
" %timeit splev(xp, tck)\n",
" \n",
" cc = b.c.reshape(b.c.shape[0], -1)\n",
" t, k, extrap = b.t, b.k, b.extrapolate\n",
" out = np.empty((len(xp), 1), dtype=b.c.dtype)\n",
" \n",
" %timeit evaluate_spline(t, cc, k, xp, 0, extrap, out)\n",
" \n",
" assert_allclose(splev(xp, tck), out.reshape(xp.shape + b.c.shape[1:]))\n",
" print \"--------\\n\""
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"============== numknots = 50\n",
"N = 1\n",
"100000 loops, best of 3: 10.7 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"100000 loops, best of 3: 13.6 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 100\n",
"100000 loops, best of 3: 20 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10000 loops, best of 3: 23.9 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 1000\n",
"10000 loops, best of 3: 106 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10000 loops, best of 3: 119 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 20000\n",
"1000 loops, best of 3: 1.93 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"100 loops, best of 3: 2.13 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"\n",
"============== numknots = 500\n",
"N = 1\n",
"100000 loops, best of 3: 11.3 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"100000 loops, best of 3: 13.7 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 100\n",
"10000 loops, best of 3: 42 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10000 loops, best of 3: 36.9 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 1000\n",
"1000 loops, best of 3: 302 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1000 loops, best of 3: 236 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 20000\n",
"100 loops, best of 3: 5.65 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"100 loops, best of 3: 4.36 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"\n",
"============== numknots = 5000\n",
"N = 1\n",
"100000 loops, best of 3: 12.3 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"100000 loops, best of 3: 14.3 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 100\n",
"10000 loops, best of 3: 199 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10000 loops, best of 3: 130 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 1000\n",
"100 loops, best of 3: 2.03 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"1000 loops, best of 3: 1.26 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n",
"N = 20000\n",
"10 loops, best of 3: 42.8 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"10 loops, best of 3: 26.4 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"--------\n",
"\n"
]
}
],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment