{ "metadata": { "name": "", "signature": "sha256:dbaed6057d2098075fd5a6351bc2b2345d55047583a4274245f719e763a47224" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting" ] }, { "cell_type": "code", "collapsed": false, "input": [ "dt=0.001\n", "nt=10000\n", "tmax=nt*dt\n", "time=np.linspace(0,tmax,nt)\n", "\n", "df=1./tmax\n", "fmax=100.\n", "nf=int(fmax/df)\n", "freq=np.linspace(0,fmax,nf)\n", "\n", "print tmax,fmax" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10.0 100.0\n" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy import signal\n", "ricker=signal.ricker(nt,20.0)\n", "plot(time,ricker,'k-')\n", "xlabel(\"Time (s)\",fontsize='large')\n", "ylabel(\"Amplitude\",fontsize='large')\n", "savefig('ricker.eps')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAZUAAAESCAYAAAA17khbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAF2JJREFUeJzt3X+QXWV9x/H3/sguBAIhigRCYG0CmFQFOxqx/mDlh41K\ngU5npAxT/FEtjgaxOC1YW92oU6Wt2jqMNCq1MVVxRLRhFENQdsQWkbT8UhIkkTQ/CRSIBsmPTXL7\nx3Nu9uzN3c29u/fuc/Kc92vmzr3n3PNkv9zZy2ef85zzPCBJkiRJkiRJkiRJkiRJkiRJhbAQWAM8\nBlxb5/3LgQeBh4D/BF7eRFtJUol0AWuBPmAK8AAwr+aY1wDHZq8XAj9toq0kaRJ0xi4gs4AQDOuB\nIeBm4OKaY+4Bfp29vhc4uYm2kqRJUJRQmQVszG1vyvaN5s+A74+zrSSpTbpjF5CpNHHsG4F3Aa8d\nR1tJUhsVJVQ2A7Nz27MJPY5aLwe+RBhTebaZtnPmzKmsW7euJcVKUomsA+bGLqJZ3YTC+4Ae6g+2\nn0IYOzl7HG0BKgo+9rGPxS6hMPwshvlZDPOzGEaTZ4OK0lPZCywCVhCu5roJWA1cmb2/BPgocBxw\nY7ZviDBIP1pbSdIkK0qoANyePfKW5F6/O3s02lY6LGzYsIFTTjkldhlSSxTl6i9Nov7+/tglFEYR\nPotTTz2VoaGh2GUU4rMoCj+L8euIXcAkyk4PSsVRqVTo7Ozkueee46ijjopdjnSQjo4OaCIr7KlI\nEVX/0Nm/f3/kSqTWMFSkiAwVpcZQkSIyVJQaQ0WKqBoq+/bti1yJ1BqGihSRPRWlxlCRIqqGiaGi\nVBgqUkSe/lJqDBUpIk9/KTWGihSRPRWlxlCRIrKnotQYKlJEDtQrNYaKFJGnv5QaQ0WKyNNfSo2h\nIkVkT0WpMVSkiOypKDWGihRRNUxc60epMFSkiKphYqgoFYaKFJGhotQYKlJEhopSY6hIERkqSo2h\nIkXkQL1SY6hIEdlTUWoMFSkiQ0WpMVSkiAwVpcZQkSIyVJQaQ0WKyIF6paZIobIQWAM8Blxb5/2X\nAPcAu4AP1by3HngIuB/4WftKlFrLnopS0x27gEwXcANwPrAZuA9YDqzOHfM0cBVwSZ32FaAfeKat\nVUotZqgoNUXpqSwA1hJ6HEPAzcDFNcc8BazK3q+no13FSe1iqCg1RQmVWcDG3PambF+jKsCdhNB5\nTwvrktrKUFFqinL6a6LfqNcCW4HjgZWEsZm7J1qU1G4O1Cs1RQmVzcDs3PZsQm+lUVuz56eA7xBO\npx0UKgMDAwde9/f309/f32SZUmvZU1HRDA4OMjg4OO72RRmH6AYeBc4DthCu4LqMkQP1VQPADuAz\n2fZUwkD/DuAo4A5gcfacV/GLq6JZs2YN8+bN46677vKPHBVSR0cHNJEVRemp7AUWASsIAXETIVCu\nzN5fAswkXBV2DLAfuBqYD7wIuDU7rhv4GgcHilRI9lSUmqKECsDt2SNvSe71E4w8RVb1HHBWu4qS\n2slQUWqKcvWXVEoO1Cs1hooUkT0VpcZQkSIyVJQaQ0WKyFBRagwVKSJDRakxVKSIHKhXagwVKSJ7\nKkqNoSJFZKgoNYaKFJGhotQYKlJEhopSY6hIEVXDpDpgLx3uDBUpIq/+UmoMFSkiT38pNYaKFJGh\notQYKlJEhopSY6hIERkqSo2hIkXkQL1SY6hIEdlTUWoMFSkiQ0WpMVSkiAwVpcZQkSIyVJQaQ0WK\nyIF6pcZQkSKyp6LUGCpSRIaKUmOoSBEZKkqNoSJFZKgoNYaKFJED9UqNoSJFZE9FqTFUpIgMFaWm\nSKGyEFgDPAZcW+f9lwD3ALuADzXZViokQ0WpKUqodAE3EMJhPnAZMK/mmKeBq4B/HEdbqZAMFaWm\nKKGyAFgLrAeGgJuBi2uOeQpYlb3fbFupkByoV2qKEiqzgI257U3Zvna3laKyp6LUdMcuIDORb1TD\nbQcGBg687u/vp7+/fwI/Vpo4Q0VFMzg4yODg4LjbFyVUNgOzc9uzCT2OlrbNh4pUBIaKiqb2D+7F\nixc31b4op79WAacBfUAPcCmwfJRjOybQVioUQ0WpKUpPZS+wCFhBuJrrJmA1cGX2/hJgJnAfcAyw\nH7iacLXXc6O0lQrPgXqlpiihAnB79shbknv9BCNPcx2qrVR49lSUmqKc/pJKyVBRagwVKSJDRakx\nVKSIDBWlptlQ6QRObEchUhlVB+qrz9LhrtFQOQ74OmEyx3XZvouAT7ajKKks7KkoNY2Gyr8AvwFO\nBXZn++4B/qQdRUllYagoNY1eUnwe4bRXfjLHp4AXtbwiqUQMFaWm0Z7KduD4mn2nAFtaW45ULoaK\nUtNoqHwZuAU4N2vzGmApI29OlNQk76hXaho9/XU9sJOwGNYU4CuEcZZ/blNdUinYU1FqGg2VCiFA\nDBGphQwVpWasUDmPxtYq+VGLapFKx1BRasYKlZsYGSonE2YHfhp4AWFsZSPwO22rTkqcoaLUjBUq\nfbnXf00Ikr8FngemAh8HnmlbZVIJOFCv1DQ6pnINcBKwJ9t+nhA0W4C/a0NdUinYU1FqGr2k+LfA\ngpp9r8r2Sxqnapg495dS0WhP5W8Ii2DdRlj/fTZwIfD+NtUllYI9FaWm0Z7KMuDVwBrCcr6rgbOB\nr7apLqkUDBWlppnlhB8hDM5LahEH6pWaRkNlWc12/htwRYtqkUrHnopS02iorCMESUe2PRP4Y+Br\n7ShKKgtDRalpNFQG6uz78ij7JTXIUFFqJrJG/QPAOa0qRCojQ0WpaWaRrvxv/VGEVR9/0fKKpBJx\noF6paTRUaucB+y2hp3JZyyuSSsSbH5WaRkOlr51FSGXl6S+lptExlftH2b+qVYVIZWSoKDWNhsrc\nOvs6cNp7aUIMFaXmUKe/qjc99hKmZOnIvddHawfqFwL/BHQRLle+vs4xnwfeTJgl+R0M96DWA78B\n9gFDHDz5pVRI+/fvp7Oz01BRMg4VKuuy50r2uiO3/RPgWy2qowu4ATgf2AzcBywnzDFW9RZCj+k0\nwjxkNxLmH6vW04/ru+gwU6lUDBUl5VChMpA9/xT4QRvrWACsJfQ4AG4GLmZkqFwELM1e3wtMB04A\ntmX78r0o6bBgqCg1Y4XKG4AfZ6+HgHNHOa4Va9TPIixNXLWJ0Bs51DGzCKFSAe4knP5aAnypBTVJ\nbWeoKDVjhcoXgJdmr2vvU8l7cQvqaPQbNVpv5HWEVSiPB1YSpui/u/aggYGBA6/7+/vp7+9vpkap\n5QwVFc3g4CCDg4Pjbj9WqLw097pv3D+hMZsJC39VzSb0RMY65uRsH4RAAXgK+A7hdNqYoSIVwf79\n++nq6jJUVBi1f3AvXry4qfYTmfurlVYRBuD7gB7gUsJAfd5yhqfZPxvYTjj1NRWYlu0/CngT8HB7\ny5Vao1Kp0NXV5R31SsZYPZWNY7xXVQFOaUEde4FFwArClWA3EQbpr8zeXwJ8n3AF2FrCNDHvzN6b\nCdyave4mTMd/RwtqktrO019KzVih8qeTVkVwe/bIW1KzvahOu18BZ7WlIqnNDBWlZqxQGZysIqSy\nMlSUmkbHVHqBTxBOPT2fPX8SOKJNdUml4EC9UtPoLMU3AqcDVwEbCOMoHyHcJ/LOMdpJGoM9FaWm\n0VC5BJgDPJtt/4JwV/s6DBVp3AwVpabR019bCZfu5h3J8P0hksbBUFFqGu2pLCNcmXUD4VLjU4D3\nEWYuzk/f0oopW6TSqN6nYqgoFY2Gynuz5w/n9nVk+9+b29eKKVuk0qgO1Hvzo1LhcsJSRJ7+UmqK\nMk2LVEqGilLTaKicRRgveZYwDX71sadNdUmlYKgoNY2e/voGcAtwNbCzfeVI5WKoKDWNhspM4KM0\nvu6JpAa4Rr1S0+jpr68Cl7ezEKmMvKRYqWm0p/Ipwjr1HwaezO2vMPoyw5IOwdNfSk2jofItwpQs\n3wF25fb7TZAmwFBRahoNlbOAFwK721iLVDqu/KjUNDqmcjcwv52FSGVkT0WpabSnsp6wRO+tHDym\n8tEW1ySVhuupKDWNhspU4HuExbpmMzyW0tWOoqSysKei1DQaKu+o2X45cAVeZixNiKGi1DQz99fx\nwAeB+7PHq4APtKMoqSwMFaXmUD2VHuAi4O3AHwCPEC4vPhV4G7CtrdVJiTNUlJpDhcoThIH5ZcA1\nwGPZ/kV4j4o0YQ7UKzWHOv31EGGVx1cDC4Bpba9IKhF7KkrNoUKln3B/yipgMaHX8h/A0YRTY5Im\noBoq3vyoVDQyUL8e+DgwF7iAECz7gQeBf2hbZVIJOKGkUtPsyo8/Ad5DmAp/EfDSllcklYinv5Sa\n8S4nvJOwcNebW1iLVDoO1Cs1RVqjfiGwhnCF2bWjHPP57P0HgVc02VYqHHsqSk1RQqULuIEQDvOB\ny4B5Nce8hTCucxrw58CNTbSVCslQUWqKEioLgLWEiwKGgJuBi2uOuQhYmr2+F5hOGNtppK1USIaK\nUtPo3F/tNgvYmNveRLg35lDHzAJOaqAtAFu2bKn7wzs6Olqy33/Lf6vZNrWhsnPnTrZv327I6LBV\nlFBp9Bs0+je3AWecccaB1z09PfT29o765W12/3ja+G+V99+aNm0aq1evHjFQv2HDBs4880x6e3vp\n6OgYM6ikdtm9ezd79uwZd/uihMpmwpT6VbMJPY6xjjk5O2ZKA20B2LFjx4QLlVrh8ssvZ8WKFSN6\nKitXruTCCy9k2bJlscuTDmj2j5uijKmsIgzA9xHu1L8UWF5zzHLCdPsAZwPbCRNaNtJWKpTTTz+d\nxx9/fMRywo8++ijz57vAqg5vRQmVvYSbKVcQZkL+JrAauDJ7AHwf+BVhUH4J8L5DtJUK68QTT2Tr\n1q0jeirbt29nxowZsUuTJqQop78Abs8eeUtqthc10VYqrGOOOYYdO3YcFCrTp0+PXZo0IUXpqUil\nMm3aNHbs2DFioN5QUQoMFSmCaqjYU1FqDBUpgnqh8vzzzzN16tTYpUkTYqhIERx55JHs2rVrRKjs\n3buXKVOmxC5NmhBDRYqgp6eH3bt3HxQq3d1FunZGap6hIkXQ09PDnj17RgzUDw0NGSo67BkqUgTV\nUMnf/GhPRSkwVKQIent7D4SKYypKiaEiRZDvqTimopQYKlIEhopSZahIEXR1dQEwNDTkQL2SYqhI\nkVQvK7anopQYKlIk9ULFgXod7gwVKZJ8qOzbtw+Azk6/kjq8+RssRTJlyhR2795NV1cXe/bs8dSX\nkmCoSJF0dXWxd+9eOjs7DRUlw1CRIunu7j5w9dfQ0JDjKUqCoSJFUg2Tzs5OLydWMgwVKZLanoqh\nohQYKlIk1QF6Q0UpMVSkSKo9FQfqlRJDRYqkevWXA/VKiaEiRVLtmThQr5QYKlIk1Uklu7q62Ldv\nn6GiJBgqUiTVEKmGi6GiFBgqUiS1oeKYilJgqEiRVMOkOomkPRWlwFCRIvH0l1JUhFCZAawEfgnc\nAUwf5biFwBrgMeDa3P4BYBNwf/ZY2K5CpVayp6IUFSFUriOEyunAD7PtWl3ADYTAmA9cBszL3qsA\nnwVekT1+0OZ6pZawp6IUFSFULgKWZq+XApfUOWYBsBZYDwwBNwMX597vaGN9UlvkLykGB+qVhiKE\nygnAtuz1tmy71ixgY257U7av6irgQeAmRj99JhVK/ubH/LZ0OJusUFkJPFzncVHNcZXsUavevqob\ngRcDZwFbgc9MtFhpMtT2VAwVpWCyfosvGOO9bcBM4AngRODJOsdsBmbntmcTeivUHP9l4LbRftDA\nwMCB1/39/fT3949RltRejqmoiAYHBxkcHBx3+yL8Fi8H3g5cnz1/t84xq4DTgD5gC3ApYbAeQhBt\nzV7/EaEHVFc+VKTYHFNREdX+wb148eKm2hdhTOXThJ7ML4Fzs22Ak4DvZa/3AouAFcAjwDeB1dl7\n1wMPEcZUzgH+YlKqlibIMRWlqAi/xc8A59fZvwV4a2779uxR64p2FCW1m2MqSlEReipSKdlTUYoM\nFSkSeypKkaEiReIsxUqRoSJF4txfSpGhIkXifSpKkaEiReKYilJkqEiROKaiFBkqUiReUqwUGSpS\nJNWeiae/lBJDRYqkGir2VJQSQ0WKxJ6KUmSoSJE4UK8UGSpSJNUQqYaLPRWlwFCRIqmGyhFHHAEM\n91ikw5mhIkVS7ZlUQ6WnpydmOVJLGCpSJLVXfdlTUQoMFSmSjo6Ous/S4cxQkSKp9lSqDBWlwFCR\nIjFElCJDRSoIQ0YpMFSkSGpPf0kp8LdaktQyhooUSW9v74jtGTNmRKpEap0yncStVCqV2DVIB1Qq\nFdatW8fcuXNZu3Ytc+bMcVxFhZP9Tjb8i1mm32BDRZKa1GyoePpLktQyhookqWUMFUlSyxQhVGYA\nK4FfAncA00c57l+BbcDD42wvSWqzIoTKdYRQOB34YbZdz1eAhRNor8zg4GDsEgrDz2KYn8UwP4vx\nK0KoXAQszV4vBS4Z5bi7gWcn0F4ZvzDD/CyG+VkM87MYvyKEygmE01pkzydMcntJUotM1qLYK4GZ\ndfZ/pGa7kj3Ga6LtJUmHuTUMB86J2fZo+jh4oL7R9msZDh0fPnz48NHYYy1NmKyeyliWA28Hrs+e\nv9um9nPHW6Ak6fAxA7iTgy8JPgn4Xu64bwBbgN3ARuCdh2gvSZIkScW2kDDW8hhwbeRaYpoN3AX8\nAvg58IG45UTXBdwP3Ba7kMimA7cAq4FHgLPjlhPVhwnfj4eBrwO9Yx+elHo3mHtzeR1dhIGmPmAK\n8AAwL2ZBEc0EzspeHw08Snk/C4BrgK8RxuXKbCnwrux1N3BsxFpi6gN+xXCQfJMwTlsWrwdewchQ\n+Xvgr7LX1wKfnuyiiug1wA9y29fhXfdV3wXOi11EJCcTxuLeSLl7KscS/keq8Ff5o8BxhHC9DTg/\nakWTr4+RobKG4Xv/ZjL21blAMW5+bLdZhIH9qk3ZvrLrI/xVcm/kOmL5HPCXwP7YhUT2YuApwjRI\n/wN8CZgataJ4ngE+A2wgXBS0nfCHR5k1fXN5GUKlEruAAjqacA79auC5yLXEcCHwJGE8pUwL1dXT\nDfwe8IXs+beUtyc/B/gg4Q+ukwjfk8tjFlQw1ftWxlSGUNlMGKCumk3orZTVFODbwL/T/D1Bqfh9\nwpxxjxMuVT8X+GrUiuLZlD3uy7ZvIYRLGb0S+C/gaWAvcCvhd6XMtjHy5vInI9ZSGN3AOsJfHz2U\ne6C+g/A/z8/FLqRAzqHcYyoAPybM8g0wQLiRuIzOJFwVeSThu7IUeH/UiiZfHwcP1FevmL0OB+oP\neDNhAG4t4ZLBsnodYQzhAcKpn/upv5xAmZyDV3+dSeipPEj467ysV39BuNKpeknxUkLPviyqN5jv\nYfgGc28ulyRJkiRJkiRJkiRJkiRJkiRpcv0ceMMk/az5DN/9PpZFeKOaJBXSc8CO7LEfeD63fdkk\n1/Jt4G0NHNdLuIHt+PaWI0maiMcJc4XFcCJhXqqeBo//IvCh9pUjHawME0pK7bae4aAZAL4FLAN+\nAzwEnEaYHmgb8L/ABbm2xwI3EabH2AR8gtG/lxcA/02YRqPq2qzdbwhrXeQDbxB463j+g6TxMlSk\niaudDvxCwsSdxxHmV1uZ7T+JEBpLcsf+GyEk5hDWt3kT8O5Rfs7LCHPYVZ1BmPDwlcAxWdv1uffX\nEOb1kiQVVL3TX/l9A8CK3Ht/SBh7qa7bMo0wLnMMYcGjXcARueMvA340ys/+IvCp3PZcQu/nPOpP\nfHgaYQp3adJ0xy5ASlB+zYmdwP8x3JvZmT0fTVjSeAqwNXd8J2HlwXqeJYRS1VrColIDwO8Swuya\n3L83Dfj1eP4DpPHy9JcUz0ZgN/ACwqmy4whjLC8b5fiHGF73pOobwOuBUwnBlV8LZR5hmQNp0hgq\nUjxbCWtUfJbQq+gkjK2Mds/LnYRVGatXf51OOO3WSwinXcC+3PHnALe3vGppDIaK1Fr11vEea/sK\nQkg8AjxDuHJsJvVtI4y3XJJt9xLGWJ4iBNQLGV6E7gjC4nRLm/4vkCSVxjzgZw0c5x31kiRJkiRJ\nkiRJkiRJkiRJkiRJkiRJ0v8Dk8GvXYIsoHIAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Python, Numpy" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def dft_py(w,dt,nf,df):\n", " fw=np.zeros(nf,dtype=np.complex64)\n", " t=np.linspace(0,w.shape[0]*dt,w.shape[0])\n", " for ifreq in xrange(nf):\n", " omega=2.*np.pi*ifreq*df\n", " fw[ifreq]=0.0j\n", " for it in xrange(w.shape[0]):\n", " fw[ifreq]+=w[it]*np.exp(-1.0j*omega*t[it])\n", " fw[ifreq]*=dt\n", " return fw\n", "\n", "def dft_np(w,dt,nf,df):\n", " fw=np.zeros(nf,dtype=np.complex128)\n", " t=np.linspace(0,w.shape[0]*dt,w.shape[0])\n", " for ifreq in xrange(nf):\n", " omega=2.*np.pi*ifreq*df\n", " fw[ifreq]=np.dot(w,np.exp(-1.0j*omega*t))*dt\n", " return fw" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "fricker=dft_np(ricker,dt,nf,df)\n", "plot(freq,abs(fricker),'k-')\n", "xlabel('Frequency (Hz)',fontsize='large')\n", "ylabel('Amplitude',fontsize='large')\n", "savefig('spectrum.eps')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit -r 3 -n 3 dft_np(ricker,dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 285 ms per loop\n" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit -r 3 -n 3 dft_py(ricker,dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 1min 14s per loop\n" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Numba" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numba\n", "\n", "dft_nb=numba.autojit(dft_np)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "fb=dft_nb(ricker,dt,nf,df)\n", "plot(freq,abs(fb))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEACAYAAABcXmojAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHsFJREFUeJzt3Xt81PWd7/HXkATBy4IgEiFpwyXagIRLNaRWcFy0IlZo\nracUH6f20LOF1bLr6TnHgvbRbThdt8c92roUpbSH7tLdo9iK6yNWLmut46VKBAUqlyAJ1yCXVIsg\nFyGQ88f3N8kwJPn9ZjLzu76fj8c8mMl8v7/55Pcg857f9/v9/QZERERERERERERERERERERERERE\nRETybjJQD2wH5nbSZoH1/EZgrIO+VcBbwHpgLXBtbksWEZF8KAAagDKgCNgAVKS1mQKssO6PB9Y4\n6JsAbrHu3wq8nOvCRUQkcz1snq/CvLHvAk4Dy4BpaW2mAkut+3VAX6DYpu9+oI91vy+wL8v6RUQk\nhwptnh8M7E153IQ5GrBrMxgY1EXfecDrwCOYYPpcRlWLiEhe2B0ptDrcTizD110C/C3wKeA7wC8z\n7C8iInlgd6SwDyhNeVyK+cTfVZsSq01RF32rgJus+88A/7ejFx82bFhrY2OjTYkiIpKmERiejw0X\nWhsvA3piP9FcTftEc1d93wFusO5PwqxA6kirGD/4wQ+8LsE3tC/aaV+0075oh/NRng7f9LvSAswB\nVmNWEy0BtgKzrecXYwJhCmZS+Rgw06YvwCzgceAC4IT1WEREPGYXCgArrVuqxWmP52TQF2Ad509Y\ni4iIx+wmmsUn4vG41yX4hvZFO+2LdtoXuZHpqiG3WcNjIiLiVCwWgyzf33WkICIibRQKIiLSRqEg\nIiJtFAoiItJGoSAiIm0UCiIi0kahICIibRQKIiLSRqEgIiJtFAoiItJGoSAiIm0UCiIi0kahICIi\nbRQKIiLSRqEgIiJtFAoiItJGoZCBgwfhlVfgyBGvKxERyQ8noTAZqAe2A3M7abPAen4jMNZB32XA\neuu20/rX1xYtgooKmDcPhg2D3/7W64pERHKv0Ob5AmAhcBOwD1gL1AJbU9pMAYYD5cB4YBFQbdP3\nayn9HwEOd/P3yKvnnoOHH4a334YhQ6CuDm6/HWprobra6+pERHLH7kihCmgAdgGnMZ/wp6W1mQos\nte7XAX2BYod9Y8BXgaeyKd4Nf/4zfPvb8G//ZgIBYPx4eOIJmDkTPvnE2/pERHLJLhQGA3tTHjdZ\nP3PSZpCDvhOAg0Cjw3pd99hjcMstcP315/78K1+B4cNh4UJv6hIRyQe7UGh1uJ1Ylq8/A3gyy755\n9/HH5ohg3rzzn4vF4KGH4NFH4eRJ92sTEckHuzmFfUBpyuNSzCf+rtqUWG2KbPoWAl8GxnVVQE1N\nTdv9eDxOPB63KTl3nnrKHCFceWXHz1dWwrhx8KtfwaxZrpUlInKORCJBIpHIybbsPuEXAtuAScD7\nwFuYT/fpE81zrH+rgcesf+36TsasSLqxi9dvbW11erCSexMmwP33w9SpnbdZtQq+/31Yu9a9ukRE\nuhKLxSDLERy74aMWzBv+amAL8DTmTX22dQNYAezATCovBu616Zs0HR9PMO/cCfX1MHly1+1uvtmc\nv7Bhgzt1iYjkU7ZzAW7x7Ejhxz82ofDzn9u3/f734cQJeOSR/NclImInn0cKkfXCC/DFLzpre+ed\nsHw5eDjSJSKSEwqFDhw5YuYIJk1y1r6yEgoL4Z138luXiEi+KRQ68OKLcN11cNFFztrHYua8heXL\n81uXiEi+KRQ6sHIlTJmSWZ877jCXwxARCTKFQgcSCbixq4WyHbjmGmhuhj178lKSiIgrFApp9u+H\nDz+EkSMz69ejh1meunp1fuoSEXGDQiHNa6+Zs5h7ZLFnbrlFoSAiwaZQSPPaa+ZM5mx84Qvw0kvQ\n0pLbmkRE3KJQSNOdULjiCigpMd+7ICISRAqFFB9/DNu3m4vcZeuGG0ywiIgEkUIhxfr1cPXV0LNn\n9tuYOBFefTV3NYmIuEmhkOLtt+Gzn+3eNiZONEcKZ87kpiYRETcpFFLkIhSKi+Hyy2HTptzUJCLi\nJoVCilyEAmgISUSCS6Fg+fhj2L0785PWOjJxIrzySve3IyLiNoWCZcMGEwhFRd3f1vXXwxtv6FLa\nIhI8CgVLroaOAMrKzAlsTenfZi0i4nMKBUsuQyEWg/Hjoa4uN9sTEXGLQsGyaZP5spxcUSiISBA5\nCYXJQD2wHZjbSZsF1vMbgbEO+/4NsBXYBDzsvOTcO3PGfB/ziBG526ZCQUSCqNDm+QJgIXATsA9Y\nC9Ri3syTpgDDgXJgPLAIqLbpeyMwFagETgMDcvLbZKmx0ZxfcPHFudvmtdear+dsaTFf1SkiEgR2\nRwpVQAOwC/PmvQyYltZmKrDUul8H9AWKbfreA/zI+jlAc5b158TmzblZipqqb18oLdVJbCISLHah\nMBjYm/K4yfqZkzaDuuhbDkwE1gAJ4JpMis61TZvMNY9yTUNIIhI0dgMbTlfax7J43Usxw0zXAr8G\nhnbUsKampu1+PB4nHo9n+FL2Nm+G22/P+WbbQmH27NxvW0QkKZFIkEgkcrItu1DYB5SmPC7FfOLv\nqk2J1aaoi75NwLPW/bXAWaA/8EF6AamhkC+bNsEDD+R+u+PHw+OP5367IiKp0j8wz58/P+tt2Q0f\nrcMM9ZQBPYHpmMniVLXA3db9auAwcNCm73PAX1r3r7SePy8Q3HDqlJlovuqq3G/76qthxw44fjz3\n2xYRyQe7I4UWYA6wGrOaaAlm9VByQGQxsAKzAqkBOAbMtOkL8Evr9i5wivZQcd327fDpT0OvXrnf\nds+eUFEBf/wjVFfnfvsiIrmW6VyA21pb83wBoV//Gp5+GpYvz8/2v/UtGDsW7r03P9sXEUkXi8Ug\ny/f3yJ/RvG1bfoaOksaNM9/oJiISBJEPhffegyuvzN/2x40zJ7GJiASBQuG9/B4pVFbC1q1mQltE\nxO8iHQqtrWb4KJ9HCr17w7Bh5lwIERG/i3QoNDdDQQH075/f19EQkogERaRDId/zCUkKBREJikiH\nQr5XHiUpFEQkKCIdCm4dKYwZA+++ay6jLSLiZwoFF0Lhkktg0CBzZCIi4meRDoV8rzxKNXq0udyF\niIifRTYUzpwxF6srL3fn9SorFQoi4n+RDYXdu2HgQHMegRsUCiISBJENhW3b3DtKADN8tHGje68n\nIpKNyIZCY6O7ofDpT8PRo/CBJ98aISLiTGRDYccOGNrhF4DmRywGo0aZpakiIn6lUHCRhpBExO8i\nHQrDhrn7mppsFhG/i2QotLaaUBgyxN3XrazUkYKI+FskQ+HQIfOdzH36uPu6o0bBli263IWI+JeT\nUJgM1APbgbmdtFlgPb8RGOugbw3QBKy3bpMzKbq7vJhPALj4YnO5i4YG919bRMQJu1AoABZi3rRH\nADOAirQ2U4DhQDkwC1jkoG8r8GNMgIwFVnXnl8iUV6EAGkISEX+zC4UqoAHYBZwGlgHT0tpMBZZa\n9+uAvkCxg76x7MvuHi9DQddAEhE/swuFwcDelMdN1s+ctBlk0/dvMMNNSzBB4hqvjxQUCiLiV4U2\nz7c63E6mn/oXAf/Luv9D4FHgv3bUsKampu1+PB4nHo9n+FLn27ED7r6725vJioaPRCTXEokEiUQi\nJ9uyezOvxkwKJyeCHwDOAg+ntPkZkMAMD4GZWL4BGOKgL0AZ8DwwqoPXb21tdZpLzpWWwuuvm0tP\nuO3sWbPqac8euPRS919fRMIvFotBlkP0dsNH6zATyGVAT2A6UJvWphZIfu6uBg4DB236XpHS/8uA\naxd/OHkSmpuhpMStVzxXjx663IWI+Jfd8FELMAdYjVlNtATYCsy2nl8MrMCsQGoAjgEzbfqCOVoY\ngxme2pmyvbzbtcscKRQUuPWK50sOIU2c6F0NIiIdsQsFgJXWLdXitMdzMugL7UcWrvNykjmpshLW\nr/e2BhGRjkTujGa/hIJWIImIHykUPDBqFGzebCadRUT8RKHggT594LLLTC0iIn4SuVDYvRvKyryu\nQkNIIuJPkQuFXbu8OT8hnUJBRPwoUqFw5AicOgX9+3tdiZlXUCiIiN9EKhR27zZHCTHPLsXXTkcK\nIuJHkQwFPygvh/ffh48/9roSEZF2kQsFP0wyAxQWQkWFWZoqIuIXkQoFv0wyJ2kISUT8JlKh4Kfh\nI1AoiIj/KBQ8pBVIIuI3kQsFv8wpQPuRQh6+MkJEJCuRCYUTJ+DwYSgu9rqSdpdfDhdcAPv2eV2J\niIgRmVDYs8d8sU4Pn/3GmlcQET/x2Vtk/vhtPiFJoSAifqJQ8Jgmm0XETyIVCn6aZE7SkYKI+Emk\nQsGPRwoVFdDYCJ984nUlIiLOQmEyUA9sB+Z20maB9fxGYGwGff8HcBbo57DerPntbOakXr3Ml/7U\n13tdiYiIfSgUAAsxb+4jgBlARVqbKcBwoByYBSxy2LcUuBnYnX35zvn1SAE0hCQi/mEXClVAA7AL\nOA0sA6altZkKLLXu1wF9gWIHfX8MfDfryjNw+jQcOGCWpPqRQkFE/MIuFAYDe1MeN1k/c9JmUBd9\np1mPXXkr3LfPnLRWVOTGq2VOK5BExC8KbZ53egGGTL62pjfwIGboyLZ/TU1N2/14PE48Hs/gpQy/\nzick6UhBRLojkUiQSCRysi27UNiHGftPKsV8wu+qTYnVpqiTvsOAMsykdLL925jhpkPpBaSGQrb8\nPJ8AUFpqLsPR3AwDBnhdjYgETfoH5vnz52e9Lbvho3WYCeQyoCcwHahNa1ML3G3drwYOAwe76LsJ\nGAgMsW5NwDg6CIRc8XsoxGLmaOHdd72uRESizi4UWoA5wGpgC/A0sBWYbd0AVgA7MJPKi4F7bfqm\ny/s1Qv164loqDSGJiB/YDR8BrLRuqRanPZ6TQd90Qx3U0C27d8P06fl+le6prIQ1a7yuQkSiLhJn\nNPt9ohm0AklE/CGTVUNeaG3t5jfQnD0LF14If/4z9O6do6ry4OhRGDgQjhyBQifHbyIinYjFYpDl\n+3vojxQOHIA+ffwdCACXXAJXXAENDV5XIiJRFvpQCMIkc5Imm0XEa5EIBb/PJyRpWaqIeE2h4CM6\nUhARr0UiFD71Ka+rcEYrkETEa6EPhT17gnOkMGwYHDoEH33kdSUiElWhD4UgDR8VFMDIkbBpk9eV\niEhUhToUWluDNXwEmlcQEW+FOhSSwzB9+3pbRya0AklEvBTqUEgOHcX8ft52Ck02i4iXQh8KQRo6\nAhg92oTC2bNeVyIiURTqUAjSyqOkfv2gf39d7kJEvBHqUAjSyqNU48bBO+94XYWIRFHoQyFow0eg\nUBAR74Q6FII4fAQKBRHxTqhDIchHCuvXm/MsRETcFNpQOHkSPvzQfEdB0AwcCL16mSMdERE3OQmF\nyUA9sB2Y20mbBdbzG4GxDvr+0Gq7AXgJKM2oageammDwYHPpiCDSEJKIeMEuFAqAhZg39xHADKAi\nrc0UYDhQDswCFjno+4/AaGAM8Bzwg+78Eh0J6tBRkkJBRLxgFwpVQAOwCzgNLAOmpbWZCiy17tcB\nfYFim75HU/pfDPwpm+K7EtRJ5iSFgoh4we4r4gcDe1MeNwHjHbQZDAyy6fsQ8HXgOFDtvGRngnqO\nQpJCQUS8YBcKTte/ZHN1oe9Zt3nAT4CZHTWqqalpux+Px4nH4442vns3fP7zWVTlEyUl0NIC+/cH\nc7JcRNyTSCRIJBI52ZZdKOzj3EngUswn/q7alFhtihz0BXgSWNFZAamhkIk9e+Cuu7Lq6guxWPvR\nwm23eV2NiPhZ+gfm+fPnZ70tuzmFdZgJ5DKgJzAdqE1rUwvcbd2vBg4DB236lqf0nwasz6b4rgR9\n+Ag0hCQi7rM7UmgB5gCrMauJlgBbgdnW84sxn/KnYCaVj9E+DNRZX4AfAVcBZ4BG4J7u/yrtzp41\nS1JLc77Q1V3jxsGTT3pdhYhEid+/aaC1NYvTevfvhzFj4ODBPFTkosZGuPFGncQmIpmJmS+Ryer9\nPZRnNIdh6Ahg6FA4dgwOHPC6EhGJitCGQpBPXEuKxaCqCt56y+tKRCQqQhkKQT9xLVVVFdTVeV2F\niERFKEMhLMNHAOPH60hBRNwT2lAIw/ARwLXXwtq1+s5mEXFHKEMhTMNHAwaY72zets3rSkQkCkIZ\nCmE6UgBNNouIe0IXCh99ZK4Z1K+f15XkzvjxmmwWEXeELhSSQ0cxv5+WlwGtQBIRt4QuFMI2dAQw\ndizU18OJE15XIiJhF8pQCMskc1Lv3lBRAetzftlAEZFzhS4Udu6EIUO8riL3NIQkIm5QKATE5z4H\nb77pdRUiEnahC4Vdu6CszOsqcu/66+H11yGLi8aKiDgWulAI65FCWZlZUbVzp9eViEiYhSoUPvoI\nTp2Cyy7zupLci8XM0cJrr3ldiYiEWahCYdcuc5QQpnMUUk2YYIaQRETyJVShsHNnOOcTkpLzCiIi\n+RK6UAjjfELSqFHmq0abm72uRETCymkoTAbqge3A3E7aLLCe3wiMddD3/wBbrfbPAn0cV92JsIdC\nQYFZmvqHP3hdiYiElZNQKAAWYt7cRwAzgIq0NlOA4UA5MAtY5KDvfwAjgdHAe8AD2f4SSWFdjppK\nQ0gikk9OQqEKaAB2AaeBZcC0tDZTgaXW/TqgL1Bs0/dF4GxKn5Is6j9H2I8UQCuQRCS/nITCYGBv\nyuMm62dO2gxy0Bfgm8AKB7V0qrU1GqFQVQVbtsDRo15XIiJhVOigjdNzaLNdCPo94BTwZEdP1tTU\ntN2Px+PE4/EON/KnP0HPntCn2zMT/ta7t/mKzldfhdtu87oaEfGDRCJBIpHIybachMI+oDTlcSnm\nE39XbUqsNkU2ff8LZj5iUmcvnhoKXYnCfELSpEnw0ksKBREx0j8wz58/P+ttORk+WoeZQC4DegLT\ngdq0NrXA3db9auAwcNCm72Tgfswcw8ks628ThaGjpEmT4He/87oKEQkjJ0cKLcAcYDVmNdESzFLS\n2dbzizHzAVMwk8rHgJk2fQF+igmKF63HbwL3ZvuLRCkUrrnGfMPcoUNw+eVeVyMiYeL3C0K0tjq8\nLOhf/zVcfTXMmZPninxi6lS46y742te8rkRE/CZmrvWT1ft7aM5ojtKRArTPK4iI5FJoQqGxEYYP\n97oK9ygURCQfQhEKp0/D3r3RWX0EMHIkHD+u71cQkdwKRSjs3g2DBsEFF3hdiXtiMbj5Zli1yutK\nRCRMQhEK27dHa+go6bbb4IUXvK5CRMIkFKHQ0ADl5V5X4b5bbjFnNp844XUlIhIWoQmFKB4pXHop\njBkDL7/sdSUiEhYKhYDTEJKI5FIoQiGqcwrQHgoOz/ETEelS4EOhpcWsPho61OtKvDFypAmELVu8\nrkREwiDwobBnDxQXQ69eXlfijVgMvvQl+Pd/97oSEQmDwIdClIeOku68E555xusqRCQMAh8KUZ5k\nTrruOjh40ASkiEh3KBRCoKAA7rgDli/3uhIRCTqFQkjceSf85jdeVyEiQRf4UKivh6uu8roK702Y\nYC4KuGOH15WISJAFOhROnjRvhDpSgMJCc7Tw5JNeVyIiQRboUNi+3XyxTs+eXlfiD9/4BvzqVzqR\nTUSy5zQUJgP1wHZgbidtFljPbwTGOuj7n4DNwBlgnPOS223ZAhUV2fQMp6oq6NED3nzT60pEJKic\nhEIBsBDz5j4CmAGkvxVPAYYD5cAsYJGDvu8CXwZezbb4rVsVCqliMXO0sHSp15WISFA5CYUqoAHY\nBZwGlgHT0tpMBZJvRXVAX6DYpm898F7WlaNQ6MjXv25OZNPltEUkG05CYTCwN+Vxk/UzJ20GOeib\nNYXC+UpK4Jpr4Nlnva5ERILISSg4nbaMdaeQTJ05YyaaP/MZN181GO65BxYu9LoKEQmiQgdt9gGl\nKY9LMZ/4u2pTYrUpctC3SzU1NW334/E48XgcMF9YP3AgXHRRJluLhttvh/vug3XrzFGDiIRbIpEg\nkUjkZFtOPt0XAtuAScD7wFuYCeOtKW2mAHOsf6uBx6x/nfR9GfifwNsdvHZrayfrK59/Hp54Alau\ndPAbRNDDD5vhtX/5F68rERG3xWIxyHL0xsmRQgvmDX81ZjXREsyb+mzr+cXACkwgNADHgJk2fcGs\nPFoAXAa8AKwHbnVa+ObNMGKE09bR81d/ZU7qa26GAQO8rkZEgsLVeYAsdHqkMGMG3Hor3H23yxUF\nyLe+BYMGwfz5XlciIm7qzpFCYEOhogKefhoqK12uKEAaG2H8ePNvnz5eVyMibulOKATyMhfHj5uv\n4NTKo64NGwZTpsBPf+p1JSISFIEMhU2bzJVRdc0jew8+CAsWwNGjXlciIkEQyFDYuBFGj/a6imD4\nzGfgppvgJz/xuhIRCYJAhsKGDTBmjNdVBMc//AP80z/Bvn1eVyIifhfYUNCRgnNlZTBrFnzve15X\nIiJ+F7jVR6dOQb9+sH8/XHKJR1UF0JEjZh6mthauvdbrakQknyK1+uiPf4ShQxUImfqLv4BHHoFv\nfhM++cTrakTErwIXCmvWmLX3krm77jKB+vd/73UlIuJXgQuFujqorva6imCKxeBnP4PFi2HtWq+r\nERE/ClworFmjUOiOK64wFxL86lfhgw+8rkZE/CZQE83NzeYibx9+CAUFHlYVAvffb873WLlS+1Ik\nbCIz0fzyyzBhgt7EcuFHPzJfVHTffdDJ5aVEJIICFQovvQSTJnldRTgUFpqv7HzjDfi7v/O6GhHx\nC4VChPXpA6tWwW9+AzU1OmIQkQCFwo4d5qJuV1/tdSXhcvnlkEiYb7KbPRtaWryuSES8FJhQeO45\nmDoVegSm4uAoLjbBsHevuXierpEkEl2BeYt99ln4yle8riK8LrkEfvtbMzz32c+aISUNJ4lETyCW\npDY1mW9YO3BA36Hghj/8wQwlDR4Mjz6qITuRoMn3ktTJQD2wHZjbSZsF1vMbgbEO+vYDXgTeA/4D\n6NtVAT//ublEgwLBHZ//PKxfD5Mnm+GkO+4wZ5LryEEk/OxCoQBYiHlzHwHMACrS2kwBhgPlwCxg\nkYO+8zChcCXwkvW4Q6dOwS9+Affc4+wXCqtEIuHq6xUVwXe+Yyb4b7gBZswwR2uPPAINDa6Wch63\n94WfaV+0077IDbtQqAIagF3AaWAZMC2tzVRgqXW/DvOpv9imb2qfpcCXOivgiSdg3DgYOdL2dwk1\nr/7DX3ihOcGtocF81/PWreYEwvJy+Pa3YelS2LLFnAjnFv3xt9O+aKd9kRuFNs8PBvamPG4C0q9R\n2lGbwcCgLvoOBA5a9w9ajzv00EPwyis2VUre9egB8bi5nT1rLpHx+9+b8xx++EN4/30YMsRchmTY\nMCgpMctdBwwwt/794aKLzK1XL3NxPhHxH7tQcDqK7ORPPNbJ9lq7ep3HH4cRIxxWIa7o0QPGjjW3\npKNHzVBTY6M5qtizB9atM9eram42F987fhyOHTNDghdeaAKid29zdnXyVlBw/v2CgnOXIu/cCa+/\n3h4sqQHj5Gd27YNk2zZ4+22vq/AH7Qt3VAOrUh4/wPmTzT8DvpbyuB7zyb+rvvWYISaAK6zHHWmg\nPTR000033XRzdsvbzF8h0AiUAT2BDXQ80bzCul8NrHHQ9x9pD4h5wP/OeeUiIpIXtwLbMMnzgPWz\n2dYtaaH1/EZgnE1fMEtSf4fDJakiIiIiIiKAsxPmwqoUeBnYDGwC/tb6eUYn/IVMAbAeeN56HNV9\n0Rd4BtgKbMGs5ovqvngA8zfyLvAkcAHR2Re/xKzafDflZ1397g9g3kvrgS+4VGNOFWCGm8qAIjqe\nxwizYmCMdf9izPBbBWYe5rvWz+cSrXmY/w78P6DWehzVfbEU+KZ1vxDoQzT3RRmwAxMEAE8D3yA6\n+2IC5soRqaHQ2e8+AvMeWoTZbw0E6Jp3SZ/j3FVL8+jijOcIeA64ifZVXWCCo7MVW2FTgpl/upH2\nI4Uo7os+mDfCdFHcF/0wH5YuxYTj88DNRGtflHFuKHT2u6evGF2FWRDUKT8mRmcnw0VRGeYTQR0Z\nnPAXMj8B7gfOpvwsivtiCNAM/DPwDvAL4CKiuS8+BB4F9gDvA4cxQydR3BdJnf3ugzDvoUm276d+\nDIVWrwvwiYuB5cB9wNG055JrkcPui8AhzHxCZ6eXRWVfFGJW9j1h/XuM84+go7IvhgH/DfOhaRDm\nb+U/p7WJyr7oiN3v3uV+8WMo7MNMtiaVcm7SRUERJhD+FTN8BCb9U0/4O+RBXW67DnOdrJ3AU8Bf\nYvZJFPdFk3Vbaz1+BhMOB4jevrgGeAP4AGgBnsUMO0dxXyR19jeR/n5aYv2sU34MhXWYK66WYU56\nm077BGMUxIAlmNUlj6X8vBYzmYb173OE34OY/9BDMGfN/x74OtHcFwcww6pXWo9vwqy+eZ7o7Yt6\nzLh4b8zfy02Yv5co7oukzv4majF/Oz0xf0flwFuuV5cDnZ30FgXXY8bPN2CGTdZjluhG/YS/G2j/\ncBDVfTEac6SwEfPpuA/R3RffpX1J6lLM0XVU9sVTmLmUU5gPCjPp+nd/EPNeWg/c4mqlIiIiIiIi\nIiIiIiIiIiIiIiIiIiIiIiIiIiIiAP8fIu+grDU2uZEAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit -r 3 -n 3 dft_nb(ricker,dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 1min 14s per loop\n" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cython" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%load_ext cythonmagic" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "%%cython\n", "import cython\n", "import numpy as np\n", "cimport numpy as np\n", "import cmath\n", "\n", "ctypedef np.double_t DTYPE_t\n", "\n", "@cython.boundscheck(False)\n", "@cython.wraparound(False)\n", "@cython.nonecheck(False)\n", "def dft_cy(np.ndarray[double] w,double dt,int nf,double df):\n", " cdef np.ndarray[np.complex128_t] fw=np.zeros(nf,dtype=np.complex128)\n", " cdef np.ndarray[double,ndim=1] t=np.linspace(0.,w.shape[0]*dt,w.shape[0])\n", " cdef int ifreq,it\n", " cdef double pi=np.pi\n", " cdef DTYPE_t omega\n", " for ifreq in xrange(nf):\n", " omega=2.*pi*ifreq*df\n", " fw[ifreq]=0.0j\n", " for it in xrange(w.shape[0]):\n", " fw[ifreq]=fw[ifreq]+w[it]*cmath.exp(-1.0j*omega*t[it])\n", " fw[ifreq]=fw[ifreq]*dt\n", " return fw" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit -r 3 -n 3 dft_cy(ricker,dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 2.82 s per loop\n" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fortran" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%file dft_f.f90\n", "\n", "subroutine dft_fv(fw,w,nt,dt,nf,df)\n", "integer,intent(in):: nt,nf\n", "real(kind=8),intent(in):: dt,df\n", "real(kind=8),intent(in):: w(nt)\n", "complex(kind=8),intent(out):: fw(nf)\n", "integer it,ifreq\n", "real(kind=8),parameter:: pi=3.141592654d0\n", "real(kind=8):: omega,t(nt)\n", "do it=1,nt\n", " t(it)=(it-1)*dt\n", "enddo\n", "do ifreq=1,nf\n", " omega=2.d0*pi*(ifreq-1)*df\n", " fw(ifreq)=dcmplx(0.d0,0.d0)\n", " do it=1,nt\n", " fw(ifreq)=fw(ifreq)+w(it)*cdexp(-dcmplx(0.d0,1.d0)*omega*t(it))\n", " enddo\n", " fw(ifreq)=fw(ifreq)*dt\n", "enddo\n", "end subroutine\n", "\n", "subroutine dft_fvec(fw,w,nt,dt,nf,df)\n", "integer,intent(in):: nt,nf\n", "real(kind=8),intent(in):: dt,df\n", "real(kind=8),intent(in):: w(nt)\n", "complex(kind=8),intent(out):: fw(nf)\n", "integer it,ifreq\n", "real(kind=8),parameter:: pi=3.141592654d0\n", "real(kind=8):: omega,t(nt)\n", "do it=1,nt\n", " t(it)=(it-1)*dt\n", "enddo\n", "do ifreq=1,nf\n", " omega=2.d0*pi*(ifreq-1)*df\n", " fw(ifreq)=dot_product(w(:),cdexp(-dcmplx(0.d0,1.d0)*omega*t(:)))*dt\n", "enddo\n", "end subroutine" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Overwriting dft_f.f90\n" ] } ], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "!f2py -c -m dft_fortran dft_f.f90 --f90exec=/opt/local/bin/gfortran-mp-4.9 > log.txt" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "import dft_fortran\n", "print dft_fortran.__doc__" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "This module 'dft_fortran' is auto-generated with f2py (version:2).\n", "Functions:\n", " fw = dft_fv(w,dt,nf,df,nt=len(w))\n", " fw = dft_fvec(w,dt,nf,df,nt=len(w))\n", ".\n" ] } ], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "fw=dft_fortran.dft_fv(ricker,dt,nf,df)\n", "plot(freq,abs(fw))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 23, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\niIiIiIiIAPw/OISdYkQnqogAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "fw=dft_fortran.dft_fvec(ricker,dt,nf,df)\n", "plot(freq,abs(fw))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 24, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\niIiIiIiIAPw/OISdYkQnqogAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit -r 3 -n 3 dft_fortran.dft_fv(ricker,dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 224 ms per loop\n" ] } ], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "%timeit -r 3 -n 3 dft_fortran.dft_fvec(ricker,dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 219 ms per loop\n" ] } ], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 26 } ], "metadata": {} } ] }