{ "metadata": { "name": "", "signature": "sha256:e659769ed2587c9dd8c7d3f98fcc727b89961930a449e9f09945794f1f16dd51" }, "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": 85 }, { "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')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 86, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 86 }, { "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": 87 }, { "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')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 88, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAZcAAAESCAYAAAAxG5hmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt8VPWd//HXkIBcGwSBEBJJIIjhEiGFJCrgWKAiKnaV\nX73sqrW7lbXSuu1vu2q724a2tusuthYRiq1t0a6XqpRiFVmrjoIK5RrlEiQJJIBcUlBALkJI9o/v\nGTIMycxJcuacubyfj8c8ODPz/Z7zmcMj85nv5XwPiIiIiIiIiIiIiIiIiIiIiIiIiIiIiMS1KUAF\nsA24r4Uyc6z3y4HRNuoWA38F1gOrgbHOhiwiIvEsDagEcoGOwAagIKzMVOAVa7sEWGmjbgC4ytq+\nGnjT6cBFRKT1Orh0nGJMgtgBnAKeBa4PKzMNWGhtrwJ6AplR6u4BMqztnsDuWAQvIiKtk+7ScQYA\nO0Oe78K0TqKVGQBkRah7P7ACmI1JlJc6F7KIiLSVWy2XRpvlfK3c7xPAN4ELgW8Bv2llfRERiQG3\nWi67gZyQ5zmYFkikMtlWmY4R6hYDk6ztF4BfN3fwwYMHN1ZVVbUpcBGRFFYF5HsdRCTpmCBzgU5E\nH9AvpWlAP1LddcAV1vZEzIyx5jSK8YMf/MDrEOKGzkUTnYsmOhdNsN/r1OyXvhvqgZnAMszsryeA\nLcAM6/0FmMQyFTN4fxS4M0pdgLuAx4DzgOPWcxER8ZhbyQVgqfUItSDs+cxW1AVYw7kTA0RExGNu\nDehLnPD7/V6HEDd0LproXDTRuXBGa2dnJSqr+1BEROzy+XzQxjyhlouIiDhOyUVERByn5CIiIo5T\nchEREccpuYiIiOOUXERExHFKLiIi4jglFxERcZySi4iIOE7JRUREHKfkIiIijlNyERERxym5iIiI\n45RcRETEcUouIiLiOCUXERFxnJKLB/bt28dbb73F4cOHvQ5FRCQm3EwuU4AKYBtwXwtl5ljvlwOj\nbdR9FlhvPbZb/8a1+fPnU1BQwP3338/gwYP585//7HVIIiKOS3fpOGnAXGASsBtYDSwBtoSUmQrk\nA0OAEmA+UBql7s0h9WcDn8TyQ7TX4sWLeeihh1i7di15eXmsWrWK6667jiVLllBaWup1eCIijnGr\n5VIMVAI7gFOYFsf1YWWmAQut7VVATyDTZl0f8GXgGccjd8jHH3/MPffcw+9//3vy8vIAKCkpYd68\nedx555189tlnHkcoIuIct5LLAGBnyPNd1mt2ymTZqDse2AdUORFsLDzyyCNcddVVjBs37qzXb7zx\nRvLz85k7d65HkYmIOM+t5NJos5yvjfu/BXi6jXVj7tNPP2XevHncf//957zn8/l48MEHefjhhzlx\n4oQH0YmIOM+tMZfdQE7I8xxMCyRSmWyrTMcoddOBvwOKIgVQVlZ2Ztvv9+P3+20F7oRnnnmGcePG\ncdFFFzX7fmFhIUVFRTz55JPcddddrsUlIhIqEAgQCAS8DqNV0jFdVrlAJ2ADUBBWZirwirVdCqy0\nWXcK8GaU4zd6ady4cY1/+tOfIpZZunRp45gxY1yKSEQkOuz3Op3DrW6xemAmsAzYDDyHme01w3qA\nSSzVmMH7BcDXo9QNuok4Hsjfvn07FRUVTJkyJWK5yZMns2/fPjZs2OBSZCIisdPWMY5EYyVh9/3s\nZz+joqKCxx9/PGrZ//iP/+D48ePMnj3bhchERCLz+XzQxjyhK/Rj7OWXX+baa6+1VXb69Om8+OKL\neJUIRUScouQSQ4cPH2b16tVMnDjRVvnCwkLS09NZt25djCMTEYktJZcYeu2117jsssvo1q2brfI+\nn48bb7yRF198McaRiYjElpJLDC1dupSpU6e2qs4NN9zA4sWLYxSRiIg7lFxiKBAIcOWVV7aqzpgx\nY6irq6O2tjZGUYmIxJ6SS4zs2bOHgwcPMnz48FbV69ChA5MnT2bZsmUxikxEJPaUXGJk+fLljBs3\njg4dWn+Kr7rqKiUXEUloSi4xsnz5csaPH9+mul/84hd5/fXXqa+vdzgqERF3KLnESHuSS//+/cnO\nzmbt2rUORyUi4g4llxj49NNP2bZtG0VFEdfSjOiKK65g+fLlDkYlIuIeJZcYWL9+PSNGjKBTp05t\n3seECRN4++23HYxKRMQ9Si4xsHbtWj7/+c+3ax8TJkxg+fLlnD592qGoRETco+QSA04kl8zMTPr2\n7cvGjRsdikpExD1KLjHgRHIBdY2JSOJScnHYp59+Sk1NTasvnmzOhAkTeOuttxyISkTEXUouDtuw\nYQPDhw+nY8eO7d7XuHHjePfdd7UEv4gkHCUXhznVJQaQm5tLfX09u3btcmR/IiJuUXJxmJPJxefz\nUVJSwqpVqxzZn4iIW5RcHLZx40YKCwsd25+Si4gkIjeTyxSgAtgG3NdCmTnW++XAaJt1vwFsATYC\nDzkYb6udPn2aiooKhg0b5tg+lVxEJBGlu3ScNGAuMAnYDawGlmCSQtBUIB8YApQA84HSKHWvBKYB\nhcApoE/sP0rLqqqqyMzMpHv37o7tc+zYsaxbt476+nrS09367xIRaR+3Wi7FQCWwA5MEngWuDysz\nDVhoba8CegKZUereDfzUeh2gLhbB27Vp0yZHpiCH6tmzJzk5ObqYUkQSilvJZQCwM+T5Lus1O2Wy\nItQdAkwAVgIBYIxjEbfBxo0bGTFihOP7VdeYiCQat/pZ7F6o4WvlftOB8zHdZ2OBPwCDmitYVlZ2\nZtvv9+P3+1t5qOg2bdrEdddd5/h+g8llxowZju9bRCQoEAgQCAQc2ZdbyWU3kBPyPAfTAolUJtsq\n0zFC3V3AImt7NdAA9AYOhAcQmlxiZePGjTzwwAOO77ekpITHHnvM8f2KiIQK/+E9a9asNu/LrW6x\nNZgurFygE3ATZlA+1BLgdmu7FPgE2Bel7mLgC9b2Rdb75yQWN5w8eZKqqiqGDh3q+L5HjBhBdXU1\nx44dc3zfIiKx4FZyqQdmAsuAzcBzmNleM6wHwCtANWbwfgHw9Sh1AX6D6Qb7AHiGpuTkum3btjFw\n4EA6d+7s+L47depEQUEB77//vuP7FhGJBTfnti61HqEWhD2f2Yq6YGaJ3dbOuBwRi5lioYqKili3\nbh2lpaUxO4aIiFN0hb5Dtm7dGpMusaCioiLWr18fs/2LiDhJycUhH374IRdddFHM9h9suYiIJAIl\nF4d8+OGHMW25FBYWsmXLFk6ePBmzY4iIOEXJxQGNjY1s3bo1pi2XLl26MHjwYDZt2hSzY4iIOEXJ\nxQF1dXWkpaXRu3fvmB5HXWMikiiUXBwQ6/GWICUXEUkUSi4OiPVMsSAlFxFJFEouDnCr5TJq1Cg+\n+OAD6uvrY34sEZH2UHJxgFvJpUePHmRlZbF169aYH0tEpD2UXBwQ65lioS655BItAyMicU/JpZ1O\nnz5NdXU1Q4YMceV4hYWFSi4iEveUXNqppqaGfv360aVLF1eOp+QiIolAyaWdtm7d6lqrBUy3WHl5\nuWvHExFpCyWXdqqqqnI1uQwcOJAjR45w4IAnt60REbFFyaWdqqurGTSo2Tsrx4TP52PkyJF88MEH\nrh1TRKS1lFzaye3kAuoaE5H4p+TSTtXV1QwePNjVY2pQX0TinZJLOzQ2NlJdXU1eXp6rxy0sLFTL\nRUTimpJLO+zfv5/OnTuTkZHh6nFHjhzJ5s2btQyMiMQtN5PLFKAC2Abc10KZOdb75cBoG3XLgF3A\neusxxdGIo/BivAWge/fuZGVlUVlZ6fqxRUTscCu5pAFzMV/+w4BbgIKwMlOBfGAIcBcw30bdRuBn\nmEQ0Gng1Zp+gGV4lF1DXmIjEN7eSSzFQCewATgHPAteHlZkGLLS2VwE9gUwbdX0xijkqL5OL1hgT\nkXjW2uTSAejfhuMMAHaGPN9lvWanTFaUut/AdKM9gUlIrvG65aLkIiLxKt1mufOBx4DpQD3QFdPS\nKAb+3Ub9RpvHaW0rZD7wQ2v7R8DDwD82V7CsrOzMtt/vx+/3t/JQ56qurub2229v937aQt1iIuK0\nQCBAIBBwZF92v8yfAz4GZgGbMcmmD/AeZpwkmlLM4HtwwP0BoAF4KKTML4EAptsLzAD+FUCejboA\nucBLwMhmjt/Y2Gg3v9mXk5PDihUrGDhwoOP7jqahoYGMjAxqa2s5//zzXT++iCQ/n88HbRx6sNst\nNhHT/bQn5LU6oK/N+mswA/W5QCfgJmBJWJklQLAZUAp8AuyLUje0i+7vANfWRDlx4gR1dXVkZ2e7\ndcizdOjQQcvAiEjcsptcPsG0VEJdCHxks349MBNYhmn5PAdsAWZYD4BXgGrM4P0C4OtR6oJpvbyP\nGXO5AviWzXjabceOHeTk5JCWlubWIc+hrjERiVd2x1x+DbyAGV/pAFwK/ASTBOxaaj1Chdef2Yq6\n0NTScZ2Xg/lBhYWFrF+/3tMYRESaY7fl8hCmxTAX6Aj8FvgT8EiM4op78ZJcNGNMROKR3ZZLI/AL\n6yHER3IZOXIkmzZtoqGhgQ4dtJKPiMSPSMllIvamEL/hUCwJpbq6mssvv9zTGDIyMrjggguorq4m\nP9/OpD0REXdESi5PcHZyycZMAT4A9MZ0qe0EvP357pGamhpyc3O9DuNM15iSi4jEk0h9KbmYa0zy\ngF9hFpU8H3PF/PmYLrJfxzi+uLVjxw5Prm8Jp3EXEYlHdjvqv425ePGY9fwY8F3r9ZRz+PBhTp48\nSe/evb0OhZEjRyq5iEjcsZtcjmKWegk11no95dTU1DBw4MDg1aueUstFROKR3dli/465zuQlzMKR\nOcC1wD0xiiuuBZNLPBgyZAgfffQRn376Kd27d/c6HBERwH7L5SmgBLPe1+cwV8iXAk/GKK64Fi+D\n+QDp6ekUFBSwadMmr0MRETnDbssFzNIrP4xaKgXEy2B+ULBrrKSkxOtQREQA+8nlqbDnoVOUPVuC\nxSs1NTUUFRV5HcYZGncRkXhjt1usCrOgZJX1OAZcDRyMUVxxLZ7GXEAzxkQk/rRnutMYzH1WrnUm\nlJhy9H4umZmZrFu3jqysLMf22R779+9n6NChHDx4MC5msIlIcnDjfi7N2YBZ5j6lHD9+nE8++YTM\nzEyvQzmjb9++nHfeeezevdvrUEREAPtjLuHrjHUDbgZSbopSbW0t2dnZcbdQZHDcxaubl4mIhLKb\nXMLXGTuKabnc4nhEcS7exluCgsll6tSpXociImI7ueTGMohEEq/JZeTIkSxbtszrMEREAPtjLi3d\n7nCNU4Ekini6gDKUpiOLSDyxm1yaW8/dRwoutx+vLZeCggKqqqr47LPPvA5FRCRqcnnKepyHWerl\nqZDH27RuQH8KZvmYbcB9LZSZY71fDoxuRd3/j7nXTK9WxNMm8XZ1flDnzp0ZNGgQFRUVXociIhI1\nuQQvmmwM2Q5eUPl74Hqbx0kD5mKSxDDMRICCsDJTMS2kIcBdwHybdXOAyUCNzVjaJV5bLqCuMRGJ\nH9EG9Musf1cCr7bjOMWYhLTDev4sJjFtCSkzDVhoba8CegKZmJuVRar7M+DfgD+1Iz5bTp06xd69\ne+N2uq+Si4jEi0gtlwkh26eAL7TwsGMA5pbIQbus1+yUyYpQ93rruSvfqLt37yYzM5OOHTu6cbhW\n0zIwIhIvIrVc5gEjrO3w61xC5dk4jt21V1qzzEAXzN0wJ9upX1ZWdmbb7/fj9/tbcSgjXsdbgtRy\nEZH2CAQCBAIBR/YVKbmMCNnObedxdmPGRoJyMC2OSGWyrTIdW6g72IqrPKT8WkwX3P7wAEKTS1vF\n83gLQE5ODsePH6euro4+ffp4HY6IJJjwH96zZs1q877cWsNkDWagPhfoBNwELAkrs4Sm5ftLgU+A\nfRHqbgT6YVpOeZiEU0QzicUp8Z5cfD4fhYWFfPDBB16HIiIpLlLLZWeE94IagQttlKsHZgLLMLO/\nnsAMyM+w3l8AvIKZMVaJWV7mzih1m4slpmpqaigtLY31Ydol2DX2hS/YHQ4TEXFepORym8PHWmo9\nQi0Iez6zFXXDxfyCzpqaGm666aZYH6ZdCgsLWblypddhiEiKi5RcAm4FkSjifUAfzIyxxx9/3Osw\nRCTF2Z2ddR7w75gLGLOAjzDXm/wYOBGb0BzV7puFNTQ00LVrVz7++GO6dOniUFjOO3LkCP369ePw\n4cOkp9tdl1RE5Fxu3CxsPnAl8A1grPWvn6ar6JPe3r17ycjIiOvEAtCjRw/69+9PZWWl16GISAqz\n+9P2S5ipvx9bzzdhrqKvomngPanF62rIzQkO6l988cVehyIiKcpuy2UP0DXstS6Y7rGUEO/TkENp\nOrKIeM1uy+UpzGytuZgpyhcCX8eslBw65/UNR6OLI4mWXJ588kmvwxCRFGY3ufyz9e8DIa/5rNf/\nOeQ1O0vBJKSamhoKCsIXco5PWmNMRLym2xzbVFtby5QpU7wOw5bBgwezf/9+Dh06REZGhtfhiEgK\ncmv5l4SXSN1iaWlpDB8+nI0bN3odioikKLvJZRRmPOVjzPL7wcfJGMUVVxobG6mpqeHCC+2sdBMf\ntEKyiHjJbrfYM8ALwL3A8diFE58OHToEQM+ePT2OxD7NGBMRL9lNLpnA93Fhcch4FOwSs65WTQgj\nR47kD3/4g9dhiEiKstst9iTw97EMJJ4lWpcYwCWXXML7779PQ0OD16GISAqy23L5KbASMxU59H4p\njdi/1XHCqq2tTZjB/KBevXrRu3dvKisrueiii7wOR0RSjN3k8jxmqZc/cvZClSnRTZZIM8VCFRUV\nsW7dOiUXEXGd3eQyCrgA+CyGscStmpoaioqKvA6j1YLJ5eabb/Y6FBFJMXbHXJYDw2IZSDxLxG4x\naEouIiJus9ty2QH8L7CIc8dcvu9wTHEnEQf0wSSX9evX09jYmFAz3UQk8dltuXQFXsbcNCwHyLYe\nubEJK36cOHGCgwcP0r9/f69DabV+/frRuXNnamtrvQ5FRFKM3eTylbDHz4EDwORWHGsKUAFsA+5r\nocwc6/1yYLSNuj+yym4AXsckPkft2rWLAQMGkJaW5vSuXaGuMRHxQmvWFusD/Auw3nqMBb5ps24a\nZrn+KZixm1uA8CWGpwL5wBDgLpruchmp7n8Bl2AmHCwGftCKz2NLonaJBSm5iIgXoiWXTsB04CVg\nN6bV8gJwCPgyZoqyHcVAJWbs5hTwLHB9WJlpwEJrexXQE7MyQKS6R0Lqdwf+ZjMe2xJ1MD9IyUVE\nvBBtQH8vZgD/KeDbmG4pgJm07hqXAZibjAXtAkpslBkAZEWp+yBwG3AMKG1FTLYk6jUuQUouIuKF\naMnlfUzLoQTTctjL2a0Fu+wmorZMafqe9bgfMxZ0Z3OFysrKzmz7/X78fr+tndfU1HD55Ze3Iaz4\nkJ2dTX19PXv27EnISQki4p5AIEAgEHBkX9GSix8zI+x2YBbwa8yU5O6YLjO7dnP2YHsOpgUSqUy2\nVaajjboATwOvtBRAaHJpjdraWm699dY21Y0HPp/vTOvlmmuu8TocEYlj4T+8Z82a1eZ92RnQ3wH8\nEDPYPhnTTdaAmaX13zaPswYzUJ+LSUo3AUvCyizBJDEw3VufAPui1B0SUv96zEQDRyV6txioa0xE\n3Gf3IsqgFdbjm8CXaEoG0dRjxmmWYWZ/PQFsAWZY7y/AtDqmYgbvj9LUvdVSXTALag4FTmPWPru7\nlZ8nooaGBnbt2kVOjuMznF1VVFTE008/7XUYIpJCUuWy7cbGxtavsblnzx5GjRrFvn37YhCSe6qq\nqrjyyit1MaWItIq1skeb8kRrrnNJOcnQJQYwaNAgjh49yt69e70ORURShJJLBIl+AWWQz+ejuLiY\nv/71r16HIiIpQsklgkS/gDJUcXExq1at8joMEUkRSi4RJEu3GEBJSYlaLiLiGiWXCJKlWwxg7Nix\nrF69moaGBq9DEZEUoOQSQTJ1i/Xp04fevXuzdetWr0MRkRSg5BJBMrVcAA3qi4hrlFxacOjQIerr\n6+nVq5fXoTimpKREg/oi4gollxYEu8SS6fbAmjEmIm5RcmlBsnWJAYwePZqKigqOHz/udSgikuSU\nXFqQTNOQg7p06UJBQQHr1zu+vqeIyFmUXFqwfft28vLyvA7DceoaExE3KLm0IFmTy6WXXsp7773n\ndRgikuSUXFqwY8cOcnNzvQ7DcePGjWPFihW0ZZVoERG7lFxakKwtl9zcXHw+H9u3b/c6FBFJYkou\nzTh06BAnT57kggsu8DoUx/l8PsaNG8fy5cu9DkVEkpiSSzN27NhBXl5eUl3jEmr8+PGsWLHC6zBE\nJIkpuTRj+/btSTneEhQcdxERiRUll2Yk63hL0MiRI9mzZw91dXVehyIiScrt5DIFqAC2Afe1UGaO\n9X45MNpG3f8GtljlFwEZ7Q0y2ZNLWloal156Ke+8847XoYhIknIzuaQBczFJYhhwC1AQVmYqkA8M\nAe4C5tuo+7/AcOAS4EPggfYGmqzTkEOpa0xEYsnN5FIMVAI7gFPAs8D1YWWmAQut7VVATyAzSt3X\ngIaQOtntDTTZWy6AZoyJSEy5mVwGADtDnu+yXrNTJstGXYCvAq+0J8jGxsaUSC7FxcVs3ryZI0eO\neB2KiCShdBePZfeS8LbO//0ecBJ4urk3y8rKzmz7/X78fn+zO/nb3/5Gp06dyMho99BNXOvSpQtj\nx47l7bff5pprrvE6HBGJA4FAgEAg4Mi+3Ewuu4GckOc5mBZIpDLZVpmOUep+BTNeM7Glg4cml0hS\nYbwlaOLEibz++utKLiICnPvDe9asWW3el5vdYmswA/W5QCfgJmBJWJklwO3WdinwCbAvSt0pwHcw\nYzAn2htkKnSJBU2cOJG//OUvXochIknIzZZLPTATWIaZ/fUEZgrxDOv9BZjxkqmYwfujwJ1R6gI8\nikk4r1nP3wO+3tYgUym5jBkzhtraWvbv30/fvn29DkdEkoibyQVgqfUItSDs+cxW1AXTonHM9u3b\nGTFihJO7jFvp6elMmDCBN954g5tvvtnrcEQkiegK/TCp1HKBpnEXEREnKbmEqaqqIj8/3+swXKPk\nIiKxoOQS4tSpU+zcuTNlZosBDB8+nGPHjun+LiLiKCWXEDU1NWRlZXHeeed5HYprfD4fkydP5tVX\nX/U6FBFJIkouIbZt25ZSXWJB11xzDS+//LLXYYhIElFyCVFZWcmQIY5OPksIV111FW+//TbHjx/3\nOhQRSRJKLiEqKytTsuVy/vnnM2rUKN58802vQxGRJKHkEiJVkwuoa0xEnKXkEiJVx1ygKbk0Ntpd\nX1REpGVKLpb6+npqamoYNGiQ16F4Yvjw4TQ2NrJ582avQxGRJKDkYqmtrSUzM5POnTt7HYonfD4f\nX/rSl/jjH//odSgikgSUXCyp3CUWNH36dF544QWvwxCRJKDkYknlwfygyy67jH379rFt2zavQxGR\nBKfkYlFygbS0NG644QZefPFFr0MRkQSn5GJRcjGmT5/O888/73UYIpLglFwsFRUVDB061OswPDd+\n/Hh27txJdXW116GISAJTcgFOnDjBzp071XLB3EBs+vTpPP30016HIiIJTMkFM1MsLy+PTp06eR1K\nXLjjjjt48skndUGliLSZ28llClABbAPua6HMHOv9cmC0jbr/D9gEnAaK2hLU5s2bKSgoaEvVpFRc\nXEyHDh147733vA5FRBKUm8klDZiLSRLDgFuA8G/0qUA+MAS4C5hvo+4HwN8Bb7c1sC1btii5hPD5\nfNxxxx0sXLjQ61BEJEG5mVyKgUpgB3AKeBa4PqzMNCD4jbYK6AlkRqlbAXzYnsCUXM5122238cIL\nL2gZfhFpEzeTywBgZ8jzXdZrdspk2ajbZkou58rOzmbMmDEsWrTI61BEJAG5mVzsjg77YhpFmNOn\nT7Nt2zYuvvhiNw+bEO6++27mzp3rdRgikoDSXTzWbiAn5HkOpgUSqUy2VaajjboRlZWVndn2+/34\n/X4Atm/fTr9+/ejWrVtrdpcSrrvuOu69917WrFnDmDFjvA5HRGIsEAgQCAQc2ZebrYR0YCswEfgI\n+CtmYH5LSJmpwEzr31LgEetfO3XfBP4VWNvMsRtbmlb70ksvMW/ePJYuXdrWz5XUHnroIbZs2cLv\nfvc7r0MREZf5fD5oY55ws+VSj0kcyzCzv57AJIcZ1vsLgFcwiaUSOArcGaUumJlic4ALgJeB9cDV\ndoPatGkTw4YNa+tnSnr/9E//RH5+PnV1dfTp08frcEQkQbg6vuGhFlsut9xyC1dffTW33367yyEl\njq997WtkZWUxa9Ysr0MRERe1p+WS8smloKCA5557jsLCQpdDShxVVVWUlJRQVVVFRkaG1+GIiEva\nk1xSevmXY8eOUVNTo5liUQwePJipU6fy6KOPeh2KiCSIlE4uGzduZOjQoVpTzIbvfve7zJkzhyNH\njngdiogkgJROLuXl5VxyySVeh5EQLr74YiZNmsTPf/5zr0MRkQSQ0sllw4YNjBo1yuswEsZPfvIT\nfvGLX7B7926vQxGROJfyyUUtF/tyc3O56667+N73vud1KCIS51J2ttjJkyfp1asXe/bsoUePHh6F\nlXgOHz7M0KFDWbJkCWPHjvU6HBGJIc0Wa4P333+fQYMGKbG00uc+9zlmz57NV7/6VT777DOvwxGR\nOJWyyWXlypWUlJR4HUZCuvXWWxk0aBA//vGPvQ5FROJUyiaXVatWUVpa6nUYCcnn8/HLX/6SBQsW\nsHr1aq/DEZE4lLLJZeXKlUou7dC/f3/mzZvHl7/8ZQ4cOOB1OCISZ1JyQL+uro78/HwOHjxIWlqa\nh2Elvu985zuUl5ezdOlSnUuRJKMB/VZ68803GT9+vL4MHfDTn/6U06dPc++999LS+m0iknpSMrm8\n/vrrTJw40eswkkJ6ejqLFi3i3Xff5fvf/77X4YhInFBykXbLyMjg1Vdf5fnnn6esrEwtGBFJveRS\nXV3NkSNHGDFihNehJJW+ffsSCAR46aWXmDFjBvX19V6HJCIeSrnksnjxYqZNm0aHDin30WMuMzOT\nQCDAzp3QvMx4AAAJYElEQVQ7mTRpktYgE0lhKfcNu2jRIm688Uavw0haPXr04M9//jMTJ07k85//\nPM8//7y6yURSUEpNRd61axeFhYXs3btX93BxwTvvvMOMGTMYMGAADz/8sLoiRRJMokxFngJUANuA\n+1ooM8d6vxwYbaNuL+A14EPgf4GekQJ4/PHHufXWW5VYXHL55Zezfv16pkyZwqRJk7jhhhtYtWqV\nWjIiKcCt5JIGzMUkiWHALUBBWJmpQD4wBLgLmG+j7v2Y5HIR8Lr1vFknT57kV7/6FXfffbcDHydx\nBQIBV4/XsWNHvvWtb1FdXc0VV1zBLbfcQmFhIbNnz6aystLVWMK5fS7imc5FE50LZ7iVXIqBSmAH\ncAp4Frg+rMw0YKG1vQrTCsmMUje0zkLgSy0FMG/ePIqKihg+fHj7PkmC8+oPp2vXrtx7771UVlby\n6KOPsmXLFsaPH8+QIUO45557WLhwIZs3b+b06dOuxaQvkSY6F010LpyR7tJxBgA7Q57vAsKXJG6u\nzAAgK0LdfsA+a3uf9bxZDz74IG+99VarAxdndejQAb/fj9/vp6GhgfLyct544w1effVVfvSjH/HR\nRx+Rl5dHfn4+gwcPJjs7m759+9KnTx/69OlD79696datG926daNz587BPmERiTNuJRe7nex2vil8\nLeyvMdJxHnvsMYYNG2YzDHFDhw4dGD16NKNHNw2vHTlyhOrqaqqqqqisrKS2tpY1a9ZQV1dHXV0d\nBw4c4NixYxw9epSTJ0/StWtXunXrRpcuXUhPTz/zSEtLO2c7LS3trCno27dvZ8WKFWcSVGiisvNa\ntPKJZOvWraxdu9brMOKCzkViKQVeDXn+AOcO6v8SuDnkeQWmJRKpbgWm6wygv/W8OZU0JR899NBD\nDz3sPbwdGLUhHagCcoFOwAaaH9B/xdouBVbaqPtfNCWa+4H/dDxyERGJa1cDWzGZ8AHrtRnWI2iu\n9X45UBSlLpipyH/B5lRkERERERGRuGTnws1klQO8CWwCNgLftF5v1YWnSSYNWA+8ZD1P1XPRE3gB\n2AJsxsy+TNVz8QDmb+QD4GngPFLnXPwGM8v2g5DXIn32BzDfpRXAF12KMS6lYbrRcoGOND/Ok8wy\ngVHWdndMt2IBZpzq36zX7yO1xqm+DfwPsMR6nqrnYiHwVWs7HcggNc9FLlCNSSgAzwF3kDrnYjxm\nJZTQ5NLSZx+G+Q7tiDlvlaTg2pRBl3L2LLP7iXAFfwpYDEyiaRYemATU0gy7ZJONGZ+7kqaWSyqe\niwzMF2q4VDwXvTA/us7HJNmXgMmk1rnI5ezk0tJnD5/h+ypm4lWLkjnztHRRZirKxfxCWUUrLjxN\nMj8HvgM0hLyWiuciD6gDfgusA34FdCM1z8VB4GGgFvgI+ATTJZSK5yKopc+ehfkODYr6fZrMyaXR\n6wDiRHfgReBe4EjYe8G57MnuWmA/ZrylpascU+VcpGNmYs6z/j3KuS36VDkXg4F/wfz4ysL8rfxD\nWJlUORfNifbZI56XZE4uuzGD2kE5nJ15U0FHTGJ5CtMtBubXSOiFp/s9iMttl2HWodsOPAN8AXNO\nUvFc7LIeq63nL2CSzF5S71yMAd4FDgD1wCJMd3oqnouglv4mwr9Ps63XWpTMyWUNZoXlXMzFlzfR\nNJCbCnzAE5jZQI+EvL4EM2iJ9e9ikt93MX8YeZhVIN4AbiM1z8VeTHfxRdbzSZjZUi+ReueiAjNu\n0AXz9zIJ8/eSiuciqKW/iSWYv51OmL+jIcBfXY8ujrR08WUqGIcZX9iA6Q5aj5maneoXnl5B04+M\nVD0Xl2BaLuWYX+sZpO65+DeapiIvxLT2U+VcPIMZazqJ+cFxJ5E/+3cx36UVwFWuRioiIiIiIiIi\nIiIiIiIiIiIiIiIiIiIiIonuHcw1Le1VaO1LxLZkvkJfUtMO4BhmHbUjwGGalrNIJdcBhzAXSgKU\nYZa8CdcADIqyr/cxizpe61RwkvyUXCTZNGK+BHtYj89hljwJle52UB74Z85OJu1dfPF/OPuW5CIR\nKblIqmgAvo65k95W67VrMcvjfIzp9hkZUn40Zkn6w8Cz1uNH1ntfAZY3s/9gC+A8YDZQg0ls84HO\n1nt+zMKR38YsEviRtb+gLphl4HdgWgtvW3VfBmaGHfN94PpmPmsnzH1r3gp5raXVoEN9QlOL71Pr\nM11ovfcWMBGzPIpIVEoukoxa+iK9HhiLuaveaMzCnl/DrKe0ALPmWEfMl/NizFpT5wPPAzdg/9f/\nfwL5mPGOfMx9L74f8n4/TIsqC/hH4DHM+l5gktJozOq8vTBrXzUAv+Ps5eAvseq/3Mzxh1h1PooS\nZ/h56klTi28OJrEFV77dDZwChkbZp4hIUtqB+eX9sfVYZL3egGk1BM0HfhhWtwKYYD3ClxN/J6T8\nV2i55eLD/OoPHce4lKa7P/oxY0KhP+z2AcXWa8c4uwUV1Blzc6vB1vPZwNxmygFcDuwJe60M+Iym\n8xJ8NDfmchPm9gS9w17fhVkQVSSqVOh7ltTSiGmhvNHMe6F3Jh0I3A58I+S1jph7WPg4N7nU2Dx+\nH6ArsDbkNR9nJ5MDnH1HzGOYG1VdgEkiVc3s9wTwB8ytAmZhlj+/sYUYPsa0PsI9h/nMoRrCno8G\nHsXc7vdA2Hs9MF1nIlGpW0xSSWi3Vi3wIKbbK/jojvkC3sO5t3AdGLJ9FJNAgkJno/0NOI7pegvu\ntyemGyyav2GSSH4L7y8E/h5z35FjmNtWN6cSk9D6h7zWSPRxl77AHzFjU+Vh7w3AdBduDa8k0hwl\nF0lVv8LMqCrGfOl2A67BJJh3MXcm/CamNXMDZqwmqBwYjhn36IzpcgpqsPb9CKYVA+aL+Ys2YmoA\nfgP8DJMY0jBdap2s99/DJInZwJMR9nMSc08Of8hr0RJLOuaulL+3/g13BfA6ZtxFJColF0kV4YPx\nazGD+XMxYxnbaOoyOoVJKF/BdA19GTN2E/yC/hAz/vIXzC/55WH7vw/TeliJudbkNZru/NhcLKH+\nFXPjqtXWsX/K2X+nT2LGZH4fYR9gJijcFnbM5o4bfC0bM57yL5x9jVC29f7fA7+MckwREWml39I0\nFdlLt2FmcdmxAl2hLyIS136H98mlK6Y19A/RCop4Td1iIva01K3klquA/ZjJBk97GIeIiIiIiIiI\niIiIiIiIiIiIiIiIiIiISKz8H7XgUwZ8Gxh7AAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 88 }, { "cell_type": "code", "collapsed": false, "input": [ "ncut=100\n", "%timeit -r 3 -n 3 dft_np(ricker[:ncut],dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 9.38 ms per loop\n" ] } ], "prompt_number": 90 }, { "cell_type": "code", "collapsed": false, "input": [ "ncut=1000\n", "%timeit -r 3 -n 3 dft_np(ricker[:ncut],dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 33.7 ms per loop\n" ] } ], "prompt_number": 91 }, { "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": 92 }, { "cell_type": "code", "collapsed": false, "input": [ "ncut=100\n", "%timeit -r 3 -n 3 dft_py(ricker[:ncut],dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 784 ms per loop\n" ] } ], "prompt_number": 93 }, { "cell_type": "code", "collapsed": false, "input": [ "ncut=1000\n", "%timeit -r 3 -n 3 dft_py(ricker[:ncut],dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 7.84 s per loop\n" ] } ], "prompt_number": 94 }, { "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 18s per loop\n" ] } ], "prompt_number": 95 }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Numba" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numba\n", "\n", "dft_nb=numba.autojit(dft_py)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 96 }, { "cell_type": "code", "collapsed": false, "input": [ "ncut=100\n", "%timeit -r 3 -n 3 dft_nb(ricker[:ncut],dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 786 ms per loop\n" ] } ], "prompt_number": 99 }, { "cell_type": "code", "collapsed": false, "input": [ "ncut=1000\n", "%timeit -r 3 -n 3 dft_nb(ricker[:ncut],dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 7.87 s per loop\n" ] } ], "prompt_number": 100 }, { "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 18s per loop\n" ] } ], "prompt_number": 101 }, { "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", "ctypedef np.complex128_t DTYPEC_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": [ "ncut=100\n", "%timeit -r 3 -n 3 dft_cy(ricker[:ncut],dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 29.3 ms per loop\n" ] } ], "prompt_number": 105 }, { "cell_type": "code", "collapsed": false, "input": [ "ncut=1000\n", "%timeit -r 3 -n 3 dft_cy(ricker[:ncut],dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 284 ms per loop\n" ] } ], "prompt_number": 106 }, { "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.86 s per loop\n" ] } ], "prompt_number": 107 }, { "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": 109 }, { "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": 110 }, { "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": 111 }, { "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": 112, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\niIiIiIiIAPw/OISdYkQnqogAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 112 }, { "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": 113, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\niIiIiIiIAPw/OISdYkQnqogAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 113 }, { "cell_type": "code", "collapsed": false, "input": [ "ncut=100\n", "%timeit -r 3 -n 3 dft_fortran.dft_fv(ricker[:ncut],dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 2.09 ms per loop\n" ] } ], "prompt_number": 114 }, { "cell_type": "code", "collapsed": false, "input": [ "ncut=1000\n", "%timeit -r 3 -n 3 dft_fortran.dft_fv(ricker[:ncut],dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 21.4 ms per loop\n" ] } ], "prompt_number": 115 }, { "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: 218 ms per loop\n" ] } ], "prompt_number": 116 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 116 }, { "cell_type": "code", "collapsed": false, "input": [ "ncut=100\n", "%timeit -r 3 -n 3 dft_fortran.dft_fvec(ricker[:ncut],dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 2.24 ms per loop\n" ] } ], "prompt_number": 117 }, { "cell_type": "code", "collapsed": false, "input": [ "ncut=1000\n", "%timeit -r 3 -n 3 dft_fortran.dft_fvec(ricker[:ncut],dt,nf,df)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 loops, best of 3: 21.2 ms per loop\n" ] } ], "prompt_number": 118 }, { "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: 216 ms per loop\n" ] } ], "prompt_number": 119 } ], "metadata": {} } ] }