├── guitar.wav ├── ch01-code-listing.pdf ├── custom_template.tplx ├── playerstats-2013-2014-subset.csv ├── fib.py ├── README.md ├── playerstats-2013-2014.csv ├── playerstats-2013-2014-top30.csv ├── european_cities.csv ├── requirements.txt ├── py3.6-env.yml ├── ch01-code-listing.py ├── ch01-Markdown.ipynb ├── ch01-code-listing.ipynb ├── tokyo-metro.json └── ch04-figures.ipynb /guitar.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrjohansson/numerical-python-book-code/HEAD/guitar.wav -------------------------------------------------------------------------------- /ch01-code-listing.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jrjohansson/numerical-python-book-code/HEAD/ch01-code-listing.pdf -------------------------------------------------------------------------------- /custom_template.tplx: -------------------------------------------------------------------------------- 1 | ((*- extends 'article.tplx' -*)) 2 | 3 | ((* block title *)) \title{Document title} ((* endblock title *)) 4 | ((* block author *)) \author{Author's Name} ((* endblock author *)) 5 | -------------------------------------------------------------------------------- /playerstats-2013-2014-subset.csv: -------------------------------------------------------------------------------- 1 | Rank,Player,GP,G,A,P 2 | 1,Sidney Crosby,80,36,68,104 3 | 2,Ryan Getzlaf,77,31,56,87 4 | 3,Claude Giroux,82,28,58,86 5 | 4,Tyler Seguin,80,37,47,84 6 | 5,Corey Perry,81,43,39,82 7 | -------------------------------------------------------------------------------- /fib.py: -------------------------------------------------------------------------------- 1 | 2 | def fib(N): 3 | """ 4 | Return a list of the first N Fibonacci numbers. 5 | """ 6 | f0, f1 = 0, 1 7 | f = [1] * N 8 | for n in range(1, N): 9 | f[n] = f0 + f1 10 | f0, f1 = f1, f[n] 11 | 12 | return f 13 | 14 | print(fib(10)) 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Numerical Python: Scientific Computing and Data Science Applications with NumPy, SciPy and Matplotlib 2 | 3 | Robert Johansson 4 | 5 | This repository contains source code listings in the form of IPython notebooks for the book [Numerical Python - Scientific Computing and Data Science Applications with Numpy, SciPy and Matplotlib](https://link.springer.com/book/10.1007/979-8-8688-0413-7) (ISBN 979-8-8688-0412-0), 3rd edition. -------------------------------------------------------------------------------- /playerstats-2013-2014.csv: -------------------------------------------------------------------------------- 1 | # 2013-2014 / Regular Season / All Skaters / Summary / Points 2 | Rank,Player,Team,Pos,GP,G,A,P,+/-,PIM,PPG,PPP,SHG,SHP,GW,OT,S,S%,TOI/GP,Shift/GP,FO% 3 | 1,Sidney Crosby,PIT,C,80,36,68,104,+18,46,11,38,0,0,5,1,259,13.9,21:58,24.0,52.5 4 | 2,Ryan Getzlaf,ANA,C,77,31,56,87,+28,31,5,23,0,0,7,1,204,15.2,21:17,25.2,49.0 5 | 3,Claude Giroux,PHI,C,82,28,58,86,+7,46,7,37,0,0,7,1,223,12.6,20:26,25.1,52.9 6 | 4,Tyler Seguin,DAL,C,80,37,47,84,+16,18,11,25,0,0,8,0,294,12.6,19:20,23.4,41.5 7 | 5,Corey Perry,ANA,R,81,43,39,82,+32,65,8,18,0,0,9,1,280,15.4,19:28,23.2,36.0 8 | -------------------------------------------------------------------------------- /playerstats-2013-2014-top30.csv: -------------------------------------------------------------------------------- 1 | # 2013-2014 / Regular Season / All Skaters / Summary / Points 2 | Rank,Player,Team,Pos,GP,G,A,P,+/-,PIM,PPG,PPP,SHG,SHP,GW,OT,S,S%,TOI/GP,Shift/GP,FO% 3 | 1,Sidney Crosby,PIT,C,80,36,68,104,+18,46,11,38,0,0,5,1,259,13.9,21:58,24.0,52.5 4 | 2,Ryan Getzlaf,ANA,C,77,31,56,87,+28,31,5,23,0,0,7,1,204,15.2,21:17,25.2,49.0 5 | 3,Claude Giroux,PHI,C,82,28,58,86,+7,46,7,37,0,0,7,1,223,12.6,20:26,25.1,52.9 6 | 4,Tyler Seguin,DAL,C,80,37,47,84,+16,18,11,25,0,0,8,0,294,12.6,19:20,23.4,41.5 7 | 5,Corey Perry,ANA,R,81,43,39,82,+32,65,8,18,0,0,9,1,280,15.4,19:28,23.2,36.0 8 | 6,Phil Kessel,TOR,R,82,37,43,80,-5,27,8,20,0,0,6,0,305,12.1,20:39,24.5,14.3 9 | 7,Taylor Hall,EDM,L,75,27,53,80,-15,44,7,17,0,1,1,1,250,10.8,20:00,25.4,45.7 10 | 8,Alex Ovechkin,WSH,L,78,51,28,79,-35,48,24,39,0,1,10,3,386,13.2,20:32,21.8,66.7 11 | 9,Joe Pavelski,SJS,C,82,41,38,79,+23,32,16,31,1,2,3,0,225,18.2,19:51,27.1,56.0 12 | 10,Jamie Benn,DAL,L,81,34,45,79,+21,64,5,19,1,3,3,1,279,12.2,19:09,25.0,52.8 13 | 11,Nicklas Backstrom,WSH,C,82,18,61,79,-20,54,6,44,1,1,1,0,196,9.2,19:48,23.3,50.4 14 | 12,Patrick Sharp,CHI,L,82,34,44,78,+13,40,10,25,0,0,3,1,313,10.9,18:53,22.7,54.6 15 | 13,Joe Thornton,SJS,C,82,11,65,76,+20,32,2,19,0,1,3,1,122,9.0,18:55,26.3,56.1 16 | 14,Erik Karlsson,OTT,D,82,20,54,74,-15,36,5,31,0,0,1,0,257,7.8,27:04,28.6,0.0 17 | 15,Evgeni Malkin,PIT,C,60,23,49,72,+10,62,7,30,0,0,3,0,191,12.0,20:03,21.4,48.8 18 | 16,Patrick Marleau,SJS,L,82,33,37,70,+0,18,11,23,2,2,4,0,285,11.6,20:31,27.3,52.9 19 | 17,Anze Kopitar,LAK,C,82,29,41,70,+34,24,10,23,0,0,9,2,200,14.5,20:53,25.4,53.3 20 | 18,Matt Duchene,COL,C,71,23,47,70,+8,19,5,17,0,0,6,1,217,10.6,18:29,22.0,50.3 21 | 19,Martin St. Louis,"TBL, NYR",R,81,30,39,69,+13,10,9,21,1,2,5,1,204,14.7,20:56,25.7,40.7 22 | 20,Patrick Kane,CHI,R,69,29,40,69,+7,22,10,25,0,0,6,0,227,12.8,19:36,22.9,50.0 23 | 21,Blake Wheeler,WPG,R,82,28,41,69,+4,63,8,19,0,0,4,2,225,12.4,18:41,24.0,37.5 24 | 22,Kyle Okposo,NYI,R,71,27,42,69,-9,51,5,15,0,0,4,1,195,13.8,20:26,22.2,47.5 25 | 23,David Krejci,BOS,C,80,19,50,69,+39,28,3,19,0,0,6,1,169,11.2,19:07,21.3,51.2 26 | 24,Chris Kunitz,PIT,L,78,35,33,68,+25,66,13,22,0,0,8,0,218,16.1,19:09,22.2,75.0 27 | 25,Jonathan Toews,CHI,C,76,28,40,68,+26,34,5,15,3,5,5,0,193,14.5,20:28,25.9,57.2 28 | 26,Thomas Vanek,"BUF, NYI, MTL",L,78,27,41,68,+7,46,8,18,0,0,4,0,248,10.9,19:21,21.6,43.5 29 | 27,Jaromir Jagr,NJD,R,82,24,43,67,+16,46,5,17,0,0,6,1,231,10.4,19:09,22.8,0.0 30 | 28,John Tavares,NYI,C,59,24,42,66,-6,40,8,25,0,0,4,0,188,12.8,21:14,22.3,49.1 31 | 29,Jason Spezza,OTT,C,75,23,43,66,-26,46,9,22,0,0,5,0,223,10.3,18:12,23.8,54.0 32 | 30,Jordan Eberle,EDM,R,80,28,37,65,-11,18,7,20,1,1,4,1,200,14.0,19:32,25.4,38.1 33 | -------------------------------------------------------------------------------- /european_cities.csv: -------------------------------------------------------------------------------- 1 | Rank,City,State,Population,Date of census/estimate 2 | 1,London[2], United Kingdom,"8,615,246",1 June 2014 3 | 2,Berlin, Germany,"3,437,916",31 May 2014 4 | 3,Madrid, Spain,"3,165,235",1 January 2014 5 | 4,Rome, Italy,"2,872,086",30 September 2014 6 | 5,Paris, France,"2,273,305",1 January 2013 7 | 6,Bucharest, Romania,"1,883,425",20 October 2011 8 | 7,Vienna, Austria,"1,794,770",1 January 2015 9 | 8,Hamburg[10], Germany,"1,746,342",30 December 2013 10 | 9,Budapest, Hungary,"1,744,665",1 January 2014 11 | 10,Warsaw, Poland,"1,729,119",31 March 2014 12 | 11,Barcelona, Spain,"1,602,386",1 January 2014 13 | 12,Munich, Germany,"1,407,836",31 December 2013 14 | 13,Milan, Italy,"1,332,516",30 September 2014 15 | 14,Sofia, Bulgaria,"1,291,895",14 December 2014 16 | 15,Prague, Czech Republic,"1,246,780",1 January 2013 17 | 16,Brussels[17], Belgium,"1,175,831",1 January 2014 18 | 17,Birmingham, United Kingdom,"1,092,330",30 June 2013 19 | 18,Cologne, Germany,"1,034,175",31 December 2013 20 | 19,Naples, Italy,"989,845",30 September 2014 21 | 20,Stockholm, Sweden,"909,976",31 January 2014 22 | 21,Turin, Italy,"898,095",30 September 2014 23 | 22,Marseille, France,"852,516",31 December 2012 24 | 23,Amsterdam, Netherlands,"813,562",31 May 2014 25 | 24,Zagreb, Croatia,"790,017",31 March 2011 26 | 25,Valencia, Spain,"786,424",1 January 2014 27 | 26,Kraków, Poland,"760,700",31 March 2014 28 | 27,Leeds, United Kingdom,"757,655",30 June 2012 29 | 28,Łódź, Poland,"709,757",31 March 2014 30 | 29,Frankfurt, Germany,"701,350",31 December 2013 31 | 30,Riga, Latvia,"701,185",1 January 2014 32 | 31,Seville, Spain,"696,676",1 January 2014 33 | 32,Palermo, Italy,"677,015",31 July 2014 34 | 33,Zaragoza, Spain,"666,058",1 January 2014 35 | 34,Athens, Greece,"664,046",24 May 2011 36 | 35,Wrocław, Poland,"632,432",31 March 2014 37 | 37,Rotterdam, Netherlands,"616,528",31 January 2013 38 | 38,Helsinki, Finland,"605,523",28 February 2013 39 | 39,Stuttgart, Germany,"604,297",31 December 2013 40 | 40,Glasgow, United Kingdom,"596,550",31 December 2013 41 | 41,Genoa, Italy,"594,774",31 July 2014 42 | 42,Düsseldorf, Germany,"593,682",31 December 2012 43 | 42,Dortmund, Germany,"575,944",31 December 2013 44 | 43,Essen, Germany,"569,884",31 December 2013 45 | 44,Málaga, Spain,"566,913",1 January 2014 46 | 45,Copenhagen, Denmark,"559,440",1 January 2013 47 | 46,Sheffield, United Kingdom,"557,382",30 June 2012 48 | 47,Lisbon, Portugal,"547,631",1 January 2011 49 | 48,Poznań, Poland,"547,161",31 March 2014 50 | 49,Bremen, Germany,"546,451",31 December 2012 51 | 50,Vilnius, Lithuania,"537,152",1 January 2013 52 | 51,Leipzig, Germany,"531,562",31 December 2013 53 | 52,Dresden, Germany,"530,754",31 December 2013 54 | 53,Gothenburg, Sweden,"528,014",31 March 2013 55 | 54,Dublin, Ireland,"527,612",10 April 2011 56 | 55,Bradford, United Kingdom,"524,619",30 June 2012 57 | 56,Hanover, Germany,"514,137",31 December 2012 58 | 57,The Hague, Netherlands,"510,909",1 May 2014 59 | 58,Manchester, United Kingdom,"510,772",30 June 2012 60 | 59,Antwerp, Belgium,"510,610",1 January 2014 61 | 60,Edinburgh, United Kingdom,"495,360",30 June 2011 62 | 61,Nuremberg, Germany,"495,121",31 December 2012 63 | 62,Duisburg, Germany,"486,816",31 December 2012 64 | 63,Lyon, France,"484,344",31 December 2010 65 | 64,Liverpool, United Kingdom,"469,690",30 June 2012 66 | 65,Gdańsk, Poland,"460,354",30 June 2012 67 | 66,Toulouse, France,"441,802",31 December 2010 68 | 67,Murcia, Spain,"441,354",1 January 2012 69 | 68,Tallinn, Estonia,"434,810",1 February 2015 70 | 69,Bristol, United Kingdom,"432,451",30 June 2012 71 | 70,Bratislava,Slovakia Slovak Republic,"417,389",31 December 2013 72 | 71,Szczecin, Poland,"409,211",30 June 2012 73 | 72,Palma de Mallorca, Spain,"407,648",1 January 2012 74 | 73,Bologna, Italy,"384,202",31 December 2013 75 | 74,Las Palmas, Spain,"382,296",1 January 2012 76 | 75,Florence, Italy,"377,207",31 December 2013 77 | 76,Brno, Czech Republic,"378,327",1 January 2013 78 | 77,Bydgoszcz, Poland,"362,286",30 June 2012 79 | 78,Bochum, Germany,"362,213",31 December 2012 80 | 79,Bilbao, Spain,"351,629",1 January 2012 81 | 80,Cardiff, United Kingdom,"348,493",30 June 2012 82 | 81,Lublin, Poland,"348,120",30 June 2012 83 | 82,Nice, France,"343,304",31 December 2010 84 | 83,Wuppertal, Germany,"342,885",31 December 2012 85 | 84,Plovdiv, Bulgaria,"341,041",31 December 2013 86 | 85,Varna, Bulgaria,"335,819",31 December 2013 87 | 86,Alicante, Spain,"334,678",1 January 2012 88 | 87,Leicester, United Kingdom,"331,606",30 June 2012 89 | 88,Utrecht, Netherlands,"330,772",1 May 2014 90 | 89,Córdoba, Spain,"328,841",1 January 2012 91 | 90,Bielefeld, Germany,"328,314",31 December 2012 92 | 91,Wakefield, United Kingdom,"327,627",30 June 2012 93 | 92,Aarhus, Denmark,"326,676",1 October 2014 94 | 93,Cluj-Napoca, Romania,"324,576",20 October 2011 95 | 94,Coventry, United Kingdom,"323,132",30 June 2012 96 | 95,Bari, Italy,"322,751",31 December 2013 97 | 96,Thessaloniki, Greece,"322,240",24 May 2011 98 | 97,Wirral, United Kingdom,"320,229",30 June 2012 99 | 98,Timișoara, Romania,"319,279",20 October 2011 100 | 99,Catania, Italy,"315,576",31 December 2013 101 | 100,Valladolid, Spain,"311,501",1 January 2012 102 | 101,Bonn, Germany,"309,869",31 December 2012 103 | 102,Malmö, Sweden,"309,105",31 March 2013 104 | 103,Nottingham, United Kingdom,"308,735",30 June 2012 105 | 104,Katowice, Poland,"308,269",30 June 2012 106 | 105,Kaunas, Lithuania,"306,888",1 January 2013 107 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | # This file may be used to create an environment using: 2 | # $ conda create --name --file 3 | # platform: osx-64 4 | alabaster=0.7.12=py36_0 5 | appnope=0.1.0=py36hf537a9a_0 6 | asn1crypto=0.24.0=py36_0 7 | astroid=2.2.5=py36_0 8 | attrs=19.1.0=py36_1 9 | babel=2.6.0=py36_0 10 | backcall=0.1.0=py36_0 11 | blas=1.0=mkl 12 | bleach=3.1.0=py36_0 13 | blosc=1.15.0=hd9629dc_0 14 | bzip2=1.0.6=h1de35cc_5 15 | ca-certificates=2019.1.23=0 16 | cctools=895=1 17 | certifi=2019.3.9=py36_0 18 | cffi=1.12.3=py36hb5b8e2f_0 19 | chardet=3.0.4=py36_1 20 | clang=4.0.1=1 21 | clang_osx-64=4.0.1=h1ce6c1d_16 22 | clangxx=4.0.1=1 23 | clangxx_osx-64=4.0.1=h22b1bf0_16 24 | cloudpickle=0.8.1=py_0 25 | compiler-rt=4.0.1=hcfea43d_1 26 | cryptography=2.6.1=py36ha12b0ac_0 27 | cvxopt=1.2.0=py36hcab12e0_0 28 | cycler=0.10.0=py36hfc81398_0 29 | cython=0.29.7=py36h0a44026_0 30 | dbus=1.13.6=h90a0687_0 31 | decorator=4.4.0=py36_1 32 | defusedxml=0.6.0=py_0 33 | docutils=0.14=py36hbfde631_0 34 | entrypoints=0.3=py36_0 35 | expat=2.2.6=h0a44026_0 36 | fastcache=1.0.2=py36h1de35cc_2 37 | freetype=2.9.1=hb4e5f40_0 38 | gettext=0.19.8.1=h15daf44_3 39 | glib=2.56.2=hd9629dc_0 40 | glpk=4.65=ha8bbb54_2 41 | gmp=6.1.2=hb37e062_1 42 | gmpy2=2.0.8=py36h6ef4df4_2 43 | graphviz=2.38.0=hc6cc99f_1011 44 | gsl=2.4=h1de35cc_4 45 | h5py=2.9.0=py36h3134771_0 46 | hdf5=1.10.4=hfa1e0ec_0 47 | icu=58.2=h4b95b61_1 48 | idna=2.8=py36_0 49 | imagesize=1.1.0=py36_0 50 | intel-openmp=2019.3=199 51 | ipykernel=5.1.0=py36h39e3cac_0 52 | ipython=7.5.0=py36h39e3cac_0 53 | ipython_genutils=0.2.0=py36h241746c_0 54 | ipywidgets=7.4.2=py36_0 55 | isort=4.3.17=py36_0 56 | jedi=0.13.3=py36_0 57 | jinja2=2.10.1=py36_0 58 | joblib=0.12.5=py36_0 59 | jpeg=9c=h1de35cc_1001 60 | jsonschema=3.0.1=py36_0 61 | jupyter=1.0.0=py36_7 62 | jupyter_client=5.2.4=py36_0 63 | jupyter_console=6.0.0=py36_0 64 | jupyter_core=4.4.0=py36_0 65 | jupyterlab=0.35.5=py36hf63ae98_0 66 | jupyterlab_server=0.2.0=py36_0 67 | keyring=18.0.0=py36_0 68 | kiwisolver=1.1.0=py36h0a44026_0 69 | lazy-object-proxy=1.3.1=py36h1de35cc_2 70 | ld64=274.2=1 71 | libcxx=4.0.1=hcfea43d_1 72 | libcxxabi=4.0.1=hcfea43d_1 73 | libedit=3.1.20181209=hb402a30_0 74 | libffi=3.2.1=h475c297_4 75 | libgfortran=3.0.1=h93005f0_2 76 | libgpuarray=0.7.6=h1de35cc_1003 77 | libiconv=1.15=hdd342a3_7 78 | libpng=1.6.37=ha441bb4_0 79 | libsodium=1.0.16=h3efe00b_0 80 | libtiff=4.0.10=h79f4b77_1001 81 | llvm=4.0.1=1 82 | llvm-lto-tapi=4.0.1=1 83 | llvmlite=0.28.0=py36h8c7ce04_0 84 | lzo=2.10=h362108e_2 85 | mako=1.0.7=py_1 86 | markupsafe=1.1.1=py36h1de35cc_0 87 | matplotlib=3.0.3=py36h54f8f79_0 88 | mccabe=0.6.1=py36_1 89 | metis=5.1.0=h0a44026_4 90 | mistune=0.8.4=py36h1de35cc_0 91 | mkl=2019.3=199 92 | mkl-service=1.1.2=py36hfbe908c_5 93 | mkl_fft=1.0.12=py36h5e564d8_0 94 | mkl_random=1.0.2=py36h27c97d8_0 95 | mpc=1.1.0=h6ef4df4_1 96 | mpfr=4.0.1=h3018a27_3 97 | mpmath=1.1.0=py36_0 98 | msgpack-python=0.6.1=py36h04f5b5a_1 99 | nbconvert=5.5.0=py_0 100 | nbformat=4.4.0=py36h827af21_0 101 | ncurses=6.1=h0a44026_1 102 | networkx=2.3=py_0 103 | notebook=5.7.8=py36_0 104 | numba=0.43.1=py36h6440ff4_0 105 | numexpr=2.6.9=py36h7413580_0 106 | numpy=1.16.3=py36hacdab7b_0 107 | numpy-base=1.16.3=py36h6575580_0 108 | numpydoc=0.9.1=py_0 109 | openssl=1.1.1b=h1de35cc_1 110 | packaging=19.0=py36_0 111 | pandas=0.24.2=py36h0a44026_0 112 | pandoc=2.2.3.2=0 113 | pandocfilters=1.4.2=py36_1 114 | parso=0.4.0=py_0 115 | patsy=0.5.1=py36_0 116 | pcre=8.43=h0a44026_0 117 | pep8=1.7.1=py36_0 118 | pexpect=4.7.0=py36_0 119 | pickleshare=0.7.5=py36_0 120 | pip=19.1=py36_0 121 | prometheus_client=0.6.0=py36_0 122 | prompt_toolkit=2.0.9=py36_0 123 | psutil=5.6.2=py36h1de35cc_0 124 | ptyprocess=0.6.0=py36_0 125 | pycodestyle=2.5.0=py36_0 126 | pycparser=2.19=py36_0 127 | pyflakes=2.1.1=py36_0 128 | pygments=2.3.1=py36_0 129 | pygpu=0.7.6=py36h917ab60_1000 130 | pygraphviz=1.5=py36h1de35cc_1000 131 | pylint=2.3.1=py36_0 132 | pymc3=3.6=py36_0 133 | pyopenssl=19.0.0=py36_0 134 | pyparsing=2.4.0=py_0 135 | pyqt=5.9.2=py36h655552a_2 136 | pyrsistent=0.14.11=py36h1de35cc_0 137 | pysocks=1.6.8=py36_0 138 | pytables=3.5.1=py36h5bccee9_0 139 | python=3.6.8=haf84260_0 140 | python-dateutil=2.8.0=py36_0 141 | python.app=2=py36_9 142 | pytz=2019.1=py_0 143 | pyzmq=18.0.0=py36h0a44026_0 144 | qt=5.9.7=h468cd18_1 145 | qtawesome=0.5.7=py36_1 146 | qtconsole=4.4.3=py36_0 147 | qtpy=1.7.0=py36_1 148 | readline=7.0=h1de35cc_5 149 | requests=2.21.0=py36_0 150 | rope=0.14.0=py_0 151 | scikit-learn=0.20.3=py36h27c97d8_0 152 | scikit-monaco=0.2.1=pypi_0 153 | scipy=1.2.1=py36h1410ff5_0 154 | seaborn=0.9.0=py36_0 155 | send2trash=1.5.0=py36_0 156 | setuptools=41.0.1=py36_0 157 | sip=4.19.8=py36h0a44026_0 158 | six=1.12.0=py36_0 159 | snappy=1.1.7=he62c110_3 160 | snowballstemmer=1.2.1=py36h6c7b616_0 161 | sphinx=2.0.1=py_0 162 | sphinxcontrib-applehelp=1.0.1=py_0 163 | sphinxcontrib-devhelp=1.0.1=py_0 164 | sphinxcontrib-htmlhelp=1.0.2=py_0 165 | sphinxcontrib-jsmath=1.0.1=py_0 166 | sphinxcontrib-qthelp=1.0.2=py_0 167 | sphinxcontrib-serializinghtml=1.1.3=py_0 168 | spyder=3.3.4=py36_0 169 | spyder-kernels=0.4.4=py36_0 170 | sqlite=3.28.0=ha441bb4_0 171 | statsmodels=0.9.0=py36h1d22016_0 172 | suitesparse=5.2.0=h7413580_0 173 | sympy=1.4=py36_0 174 | tbb=2019.4=h04f5b5a_0 175 | terminado=0.8.2=py36_0 176 | testpath=0.4.2=py36_0 177 | theano=1.0.4=py36h0a44026_1000 178 | tk=8.6.8=ha441bb4_0 179 | tornado=6.0.2=py36h1de35cc_0 180 | tqdm=4.31.1=py36_1 181 | traitlets=4.3.2=py36h65bd3ce_0 182 | typed-ast=1.3.4=py36h1de35cc_0 183 | urllib3=1.24.2=py36_0 184 | wcwidth=0.1.7=py36h8c6ec74_0 185 | webencodings=0.5.1=py36_1 186 | wheel=0.33.1=py36_0 187 | widgetsnbextension=3.4.2=py36_0 188 | wrapt=1.11.1=py36h1de35cc_0 189 | wurlitzer=1.0.2=py36_0 190 | xz=5.2.4=h1de35cc_4 191 | zeromq=4.3.1=h0a44026_3 192 | zlib=1.2.11=h1de35cc_3 193 | -------------------------------------------------------------------------------- /py3.6-env.yml: -------------------------------------------------------------------------------- 1 | name: py3.6 2 | channels: 3 | - conda-forge 4 | - defaults 5 | dependencies: 6 | - alabaster=0.7.12=py36_0 7 | - appnope=0.1.0=py36hf537a9a_0 8 | - asn1crypto=0.24.0=py36_0 9 | - astroid=2.2.5=py36_0 10 | - attrs=19.1.0=py36_1 11 | - babel=2.6.0=py36_0 12 | - backcall=0.1.0=py36_0 13 | - blas=1.0=mkl 14 | - bleach=3.1.0=py36_0 15 | - blosc=1.15.0=hd9629dc_0 16 | - bzip2=1.0.6=h1de35cc_5 17 | - ca-certificates=2019.1.23=0 18 | - cctools=895=1 19 | - certifi=2019.3.9=py36_0 20 | - cffi=1.12.3=py36hb5b8e2f_0 21 | - chardet=3.0.4=py36_1 22 | - clang=4.0.1=1 23 | - clang_osx-64=4.0.1=h1ce6c1d_16 24 | - clangxx=4.0.1=1 25 | - clangxx_osx-64=4.0.1=h22b1bf0_16 26 | - cloudpickle=0.8.1=py_0 27 | - compiler-rt=4.0.1=hcfea43d_1 28 | - cryptography=2.6.1=py36ha12b0ac_0 29 | - cvxopt=1.2.0=py36hcab12e0_0 30 | - cycler=0.10.0=py36hfc81398_0 31 | - cython=0.29.7=py36h0a44026_0 32 | - dbus=1.13.6=h90a0687_0 33 | - decorator=4.4.0=py36_1 34 | - defusedxml=0.6.0=py_0 35 | - docutils=0.14=py36hbfde631_0 36 | - entrypoints=0.3=py36_0 37 | - expat=2.2.6=h0a44026_0 38 | - fastcache=1.0.2=py36h1de35cc_2 39 | - freetype=2.9.1=hb4e5f40_0 40 | - gettext=0.19.8.1=h15daf44_3 41 | - glib=2.56.2=hd9629dc_0 42 | - glpk=4.65=ha8bbb54_2 43 | - gmp=6.1.2=hb37e062_1 44 | - gmpy2=2.0.8=py36h6ef4df4_2 45 | - graphviz=2.38.0=hc6cc99f_1011 46 | - gsl=2.4=h1de35cc_4 47 | - h5py=2.9.0=py36h3134771_0 48 | - hdf5=1.10.4=hfa1e0ec_0 49 | - icu=58.2=h4b95b61_1 50 | - idna=2.8=py36_0 51 | - imagesize=1.1.0=py36_0 52 | - intel-openmp=2019.3=199 53 | - ipykernel=5.1.0=py36h39e3cac_0 54 | - ipython=7.5.0=py36h39e3cac_0 55 | - ipython_genutils=0.2.0=py36h241746c_0 56 | - ipywidgets=7.4.2=py36_0 57 | - isort=4.3.17=py36_0 58 | - jedi=0.13.3=py36_0 59 | - jinja2=2.10.1=py36_0 60 | - joblib=0.12.5=py36_0 61 | - jpeg=9c=h1de35cc_1001 62 | - jsonschema=3.0.1=py36_0 63 | - jupyter=1.0.0=py36_7 64 | - jupyter_client=5.2.4=py36_0 65 | - jupyter_console=6.0.0=py36_0 66 | - jupyter_core=4.4.0=py36_0 67 | - jupyterlab=0.35.5=py36hf63ae98_0 68 | - jupyterlab_server=0.2.0=py36_0 69 | - keyring=18.0.0=py36_0 70 | - kiwisolver=1.1.0=py36h0a44026_0 71 | - lazy-object-proxy=1.3.1=py36h1de35cc_2 72 | - ld64=274.2=1 73 | - libcxx=4.0.1=hcfea43d_1 74 | - libcxxabi=4.0.1=hcfea43d_1 75 | - libedit=3.1.20181209=hb402a30_0 76 | - libffi=3.2.1=h475c297_4 77 | - libgfortran=3.0.1=h93005f0_2 78 | - libgpuarray=0.7.6=h1de35cc_1003 79 | - libiconv=1.15=hdd342a3_7 80 | - libpng=1.6.37=ha441bb4_0 81 | - libsodium=1.0.16=h3efe00b_0 82 | - libtiff=4.0.10=h79f4b77_1001 83 | - llvm=4.0.1=1 84 | - llvm-lto-tapi=4.0.1=1 85 | - llvmlite=0.28.0=py36h8c7ce04_0 86 | - lzo=2.10=h362108e_2 87 | - mako=1.0.7=py_1 88 | - markupsafe=1.1.1=py36h1de35cc_0 89 | - matplotlib=3.0.3=py36h54f8f79_0 90 | - mccabe=0.6.1=py36_1 91 | - metis=5.1.0=h0a44026_4 92 | - mistune=0.8.4=py36h1de35cc_0 93 | - mkl=2019.3=199 94 | - mkl-service=1.1.2=py36hfbe908c_5 95 | - mkl_fft=1.0.12=py36h5e564d8_0 96 | - mkl_random=1.0.2=py36h27c97d8_0 97 | - mpc=1.1.0=h6ef4df4_1 98 | - mpfr=4.0.1=h3018a27_3 99 | - mpmath=1.1.0=py36_0 100 | - msgpack-python=0.6.1=py36h04f5b5a_1 101 | - nbconvert=5.5.0=py_0 102 | - nbformat=4.4.0=py36h827af21_0 103 | - ncurses=6.1=h0a44026_1 104 | - networkx=2.3=py_0 105 | - notebook=5.7.8=py36_0 106 | - numba=0.43.1=py36h6440ff4_0 107 | - numexpr=2.6.9=py36h7413580_0 108 | - numpy=1.16.3=py36hacdab7b_0 109 | - numpy-base=1.16.3=py36h6575580_0 110 | - numpydoc=0.9.1=py_0 111 | - openssl=1.1.1b=h1de35cc_1 112 | - packaging=19.0=py36_0 113 | - pandas=0.24.2=py36h0a44026_0 114 | - pandoc=2.2.3.2=0 115 | - pandocfilters=1.4.2=py36_1 116 | - parso=0.4.0=py_0 117 | - patsy=0.5.1=py36_0 118 | - pcre=8.43=h0a44026_0 119 | - pep8=1.7.1=py36_0 120 | - pexpect=4.7.0=py36_0 121 | - pickleshare=0.7.5=py36_0 122 | - pip=19.1=py36_0 123 | - prometheus_client=0.6.0=py36_0 124 | - prompt_toolkit=2.0.9=py36_0 125 | - psutil=5.6.2=py36h1de35cc_0 126 | - ptyprocess=0.6.0=py36_0 127 | - pycodestyle=2.5.0=py36_0 128 | - pycparser=2.19=py36_0 129 | - pyflakes=2.1.1=py36_0 130 | - pygments=2.3.1=py36_0 131 | - pygpu=0.7.6=py36h917ab60_1000 132 | - pygraphviz=1.5=py36h1de35cc_1000 133 | - pylint=2.3.1=py36_0 134 | - pymc3=3.6=py36_0 135 | - pyopenssl=19.0.0=py36_0 136 | - pyparsing=2.4.0=py_0 137 | - pyqt=5.9.2=py36h655552a_2 138 | - pyrsistent=0.14.11=py36h1de35cc_0 139 | - pysocks=1.6.8=py36_0 140 | - pytables=3.5.1=py36h5bccee9_0 141 | - python=3.6.8=haf84260_0 142 | - python-dateutil=2.8.0=py36_0 143 | - python.app=2=py36_9 144 | - pytz=2019.1=py_0 145 | - pyzmq=18.0.0=py36h0a44026_0 146 | - qt=5.9.7=h468cd18_1 147 | - qtawesome=0.5.7=py36_1 148 | - qtconsole=4.4.3=py36_0 149 | - qtpy=1.7.0=py36_1 150 | - readline=7.0=h1de35cc_5 151 | - requests=2.21.0=py36_0 152 | - rope=0.14.0=py_0 153 | - scikit-learn=0.20.3=py36h27c97d8_0 154 | - scipy=1.2.1=py36h1410ff5_0 155 | - seaborn=0.9.0=py36_0 156 | - send2trash=1.5.0=py36_0 157 | - setuptools=41.0.1=py36_0 158 | - sip=4.19.8=py36h0a44026_0 159 | - six=1.12.0=py36_0 160 | - snappy=1.1.7=he62c110_3 161 | - snowballstemmer=1.2.1=py36h6c7b616_0 162 | - sphinx=2.0.1=py_0 163 | - sphinxcontrib-applehelp=1.0.1=py_0 164 | - sphinxcontrib-devhelp=1.0.1=py_0 165 | - sphinxcontrib-htmlhelp=1.0.2=py_0 166 | - sphinxcontrib-jsmath=1.0.1=py_0 167 | - sphinxcontrib-qthelp=1.0.2=py_0 168 | - sphinxcontrib-serializinghtml=1.1.3=py_0 169 | - spyder=3.3.4=py36_0 170 | - spyder-kernels=0.4.4=py36_0 171 | - sqlite=3.28.0=ha441bb4_0 172 | - statsmodels=0.9.0=py36h1d22016_0 173 | - suitesparse=5.2.0=h7413580_0 174 | - sympy=1.4=py36_0 175 | - tbb=2019.4=h04f5b5a_0 176 | - terminado=0.8.2=py36_0 177 | - testpath=0.4.2=py36_0 178 | - theano=1.0.4=py36h0a44026_1000 179 | - tk=8.6.8=ha441bb4_0 180 | - tornado=6.0.2=py36h1de35cc_0 181 | - tqdm=4.31.1=py36_1 182 | - traitlets=4.3.2=py36h65bd3ce_0 183 | - typed-ast=1.3.4=py36h1de35cc_0 184 | - urllib3=1.24.2=py36_0 185 | - wcwidth=0.1.7=py36h8c6ec74_0 186 | - webencodings=0.5.1=py36_1 187 | - wheel=0.33.1=py36_0 188 | - widgetsnbextension=3.4.2=py36_0 189 | - wrapt=1.11.1=py36h1de35cc_0 190 | - wurlitzer=1.0.2=py36_0 191 | - xz=5.2.4=h1de35cc_4 192 | - zeromq=4.3.1=h0a44026_3 193 | - zlib=1.2.11=h1de35cc_3 194 | - pip: 195 | - scikit-monaco==0.2.1 196 | prefix: /Users/rob/miniconda3/envs/py3.6 197 | 198 | -------------------------------------------------------------------------------- /ch01-code-listing.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf-8 3 | 4 | # # Chapter 1: Computing with Python 5 | 6 | # Robert Johansson 7 | # 8 | # Source code listings for [Numerical Python - Scientific Computing and Data Science Applications with Numpy, SciPy and Matplotlib](https://link.springer.com/book/10.1007/979-8-8688-0413-7) (ISBN 979-8-8688-0412-0). 9 | 10 | # ## Interpreter 11 | 12 | # In[1]: 13 | 14 | 15 | get_ipython().run_cell_magic('writefile', 'hello.py', 'print("Hello from Python!")\n') 16 | 17 | 18 | # In[2]: 19 | 20 | 21 | get_ipython().system('python hello.py') 22 | 23 | 24 | # In[3]: 25 | 26 | 27 | get_ipython().system('python --version') 28 | 29 | 30 | # ## Input and output caching 31 | # 32 | # (restart the kernel for the same output and cell numbers) 33 | 34 | # In[1]: 35 | 36 | 37 | 3 * 3 38 | 39 | 40 | # In[2]: 41 | 42 | 43 | In[1] 44 | 45 | 46 | # In[3]: 47 | 48 | 49 | Out[1] 50 | 51 | 52 | # In[4]: 53 | 54 | 55 | In 56 | 57 | 58 | # In[5]: 59 | 60 | 61 | Out 62 | 63 | 64 | # In[6]: 65 | 66 | 67 | 1+2 68 | 69 | 70 | # In[7]: 71 | 72 | 73 | 1+2; 74 | 75 | 76 | # In[8]: 77 | 78 | 79 | x = 1 80 | 81 | 82 | # In[9]: 83 | 84 | 85 | x = 2; x 86 | 87 | 88 | # ## Documentation 89 | 90 | # In[10]: 91 | 92 | 93 | import os 94 | 95 | 96 | # In[11]: 97 | 98 | 99 | # try os.w 100 | 101 | 102 | # In[12]: 103 | 104 | 105 | import math 106 | 107 | 108 | # In[13]: 109 | 110 | 111 | get_ipython().run_line_magic('pinfo', 'math.cos') 112 | 113 | 114 | # ## Interaction with System Shell 115 | 116 | # In[14]: 117 | 118 | 119 | get_ipython().system('touch file1.py file2.py file3.py') 120 | 121 | 122 | # In[15]: 123 | 124 | 125 | get_ipython().system('ls file*') 126 | 127 | 128 | # In[16]: 129 | 130 | 131 | files = get_ipython().getoutput('ls file*') 132 | 133 | 134 | # In[17]: 135 | 136 | 137 | len(files) 138 | 139 | 140 | # In[18]: 141 | 142 | 143 | files 144 | 145 | 146 | # In[19]: 147 | 148 | 149 | file = "file1.py" 150 | 151 | 152 | # In[20]: 153 | 154 | 155 | get_ipython().system('ls -l $file') 156 | 157 | 158 | # ## Running scripts from the IPython console 159 | 160 | # In[21]: 161 | 162 | 163 | get_ipython().run_cell_magic('writefile', 'fib.py', '\ndef fib(N): \n """ \n Return a list of the first N Fibonacci numbers.\n """ \n f0, f1 = 0, 1\n f = [1] * N\n for n in range(1, N):\n f[n] = f0 + f1\n f0, f1 = f1, f[n]\n\n return f\n\nprint(fib(10))\n') 164 | 165 | 166 | # In[22]: 167 | 168 | 169 | get_ipython().system('python fib.py') 170 | 171 | 172 | # In[23]: 173 | 174 | 175 | get_ipython().run_line_magic('run', 'fib.py') 176 | 177 | 178 | # In[24]: 179 | 180 | 181 | fib(6) 182 | 183 | 184 | # ## Debugger 185 | 186 | # In[25]: 187 | 188 | 189 | fib(1.0) 190 | 191 | 192 | # In[ ]: 193 | 194 | 195 | get_ipython().run_line_magic('debug', '') 196 | 197 | 198 | # ## Timing and profiling code 199 | 200 | # In[27]: 201 | 202 | 203 | get_ipython().run_line_magic('timeit', 'fib(100)') 204 | 205 | 206 | # In[28]: 207 | 208 | 209 | result = get_ipython().run_line_magic('time', 'fib(100)') 210 | 211 | 212 | # In[29]: 213 | 214 | 215 | len(result) 216 | 217 | 218 | # In[30]: 219 | 220 | 221 | import numpy as np 222 | 223 | def random_walker_max_distance(M, N): 224 | """ 225 | Simulate N random walkers taking M steps, and return the largest distance 226 | from the starting point achieved by any of the random walkers. 227 | """ 228 | trajectories = [np.random.randn(M).cumsum() for _ in range(N)] 229 | return np.max(np.abs(trajectories)) 230 | 231 | 232 | # In[31]: 233 | 234 | 235 | get_ipython().run_line_magic('prun', 'random_walker_max_distance(400, 10000)') 236 | 237 | 238 | # ## Jupyter notebook 239 | 240 | # In[32]: 241 | 242 | 243 | from IPython.display import display, Image, HTML, Math 244 | 245 | 246 | # In[33]: 247 | 248 | 249 | Image(url='http://python.org/images/python-logo.gif') 250 | 251 | 252 | # In[34]: 253 | 254 | 255 | import scipy, numpy, matplotlib 256 | modules = [numpy, matplotlib, scipy] 257 | row = " %s %s " 258 | rows = "\n".join([row % (module.__name__, module.__version__) for module in modules]) 259 | s = " %s
LibraryVersion
" % rows 260 | 261 | 262 | # In[35]: 263 | 264 | 265 | s 266 | 267 | 268 | # In[36]: 269 | 270 | 271 | HTML(s) 272 | 273 | 274 | # In[37]: 275 | 276 | 277 | class HTMLDisplayer(object): 278 | def __init__(self, code): 279 | self.code = code 280 | 281 | def _repr_html_(self): 282 | return self.code 283 | 284 | 285 | # In[38]: 286 | 287 | 288 | HTMLDisplayer(s) 289 | 290 | 291 | # In[39]: 292 | 293 | 294 | Math(r'\hat{H} = -\frac{1}{2}\epsilon \hat{\sigma}_z-\frac{1}{2}\delta \hat{\sigma}_x') 295 | 296 | 297 | # In[40]: 298 | 299 | 300 | class QubitHamiltonian(object): 301 | def __init__(self, epsilon, delta): 302 | self.epsilon = epsilon 303 | self.delta = delta 304 | 305 | def _repr_latex_(self): 306 | return "$\hat{H} = -%.2f\hat{\sigma}_z-%.2f\hat{\sigma}_x$" % \ 307 | (self.epsilon/2, self.delta/2) 308 | 309 | 310 | # In[41]: 311 | 312 | 313 | QubitHamiltonian(0.5, 0.25) 314 | 315 | 316 | # In[42]: 317 | 318 | 319 | import matplotlib.pyplot as plt 320 | import numpy as np 321 | from scipy import stats 322 | 323 | def f(mu): 324 | X = stats.norm(loc=mu, scale=np.sqrt(mu)) 325 | N = stats.poisson(mu) 326 | x = np.linspace(0, X.ppf(0.999)) 327 | n = np.arange(0, x[-1]) 328 | 329 | fig, ax = plt.subplots() 330 | ax.plot(x, X.pdf(x), color='black', lw=2, label="Normal($\mu=%d, \sigma^2=%d$)" % (mu, mu)) 331 | ax.bar(n, N.pmf(n), align='edge', label=r"Poisson($\lambda=%d$)" % mu) 332 | ax.set_ylim(0, X.pdf(x).max() * 1.25) 333 | ax.legend(loc=2, ncol=2) 334 | plt.close(fig) 335 | return fig 336 | 337 | 338 | # In[44]: 339 | 340 | 341 | from ipywidgets import interact 342 | import ipywidgets as widgets 343 | 344 | 345 | # In[45]: 346 | 347 | 348 | interact(f, mu=widgets.FloatSlider(min=1.0, max=20.0, step=1.0)); 349 | 350 | 351 | # ## Jupyter nbconvert 352 | 353 | # In[2]: 354 | 355 | 356 | get_ipython().system('jupyter nbconvert --to html ch01-code-listing.ipynb') 357 | 358 | 359 | # In[2]: 360 | 361 | 362 | get_ipython().system('jupyter nbconvert --to pdf ch01-code-listing.ipynb') 363 | 364 | 365 | # In[8]: 366 | 367 | 368 | get_ipython().run_cell_magic('writefile', 'custom_template.tplx', "((*- extends 'article.tplx' -*))\n\n((* block title *)) \\title{Document title} ((* endblock title *))\n((* block author *)) \\author{Author's Name} ((* endblock author *))\n") 369 | 370 | 371 | # In[ ]: 372 | 373 | 374 | get_ipython().system('jupyter nbconvert ch01-code-listing.ipynb --to pdf --template custom_template.tplx') 375 | 376 | 377 | # In[11]: 378 | 379 | 380 | get_ipython().system('jupyter nbconvert ch01-code-listing.ipynb --to python') 381 | 382 | 383 | # # Versions 384 | 385 | # In[1]: 386 | 387 | 388 | get_ipython().run_line_magic('reload_ext', 'version_information') 389 | get_ipython().run_line_magic('version_information', 'numpy') 390 | 391 | 392 | # In[ ]: 393 | 394 | 395 | 396 | 397 | -------------------------------------------------------------------------------- /ch01-Markdown.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# IPython notebook Markdown summary" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Robert Johansson\n", 15 | "\n", 16 | "Source code listings for [Numerical Python - Scientific Computing and Data Science Applications with Numpy, SciPy and Matplotlib](https://link.springer.com/book/10.1007/979-8-8688-0413-7) (ISBN 979-8-8688-0412-0)." 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": {}, 22 | "source": [ 23 | "Test notebook for Markdown table in Chapter 1." 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": {}, 29 | "source": [ 30 | "## Italics" 31 | ] 32 | }, 33 | { 34 | "cell_type": "markdown", 35 | "metadata": {}, 36 | "source": [ 37 | "Text that is surrounded by asterisks `*text*` is displayed as italics: *text*" 38 | ] 39 | }, 40 | { 41 | "cell_type": "markdown", 42 | "metadata": {}, 43 | "source": [ 44 | "## Bold" 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "metadata": {}, 50 | "source": [ 51 | "Text that is surrounded by double asterisks `**text**` is displayed as bold: **text**" 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "## Strike-through" 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "Text that is surrounded by double tidle `~~text~~` is displayed as strike-through: ~~text~~" 66 | ] 67 | }, 68 | { 69 | "cell_type": "markdown", 70 | "metadata": {}, 71 | "source": [ 72 | "## Fixed-width font" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": {}, 78 | "source": [ 79 | "Text that is quoted with ` characters are displayed as fixed-width font:\n", 80 | "\n", 81 | "`text`" 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "## URLs" 89 | ] 90 | }, 91 | { 92 | "cell_type": "markdown", 93 | "metadata": {}, 94 | "source": [ 95 | "URLs are written as\t`[URL text](http://www.example.com)`: [URL text](http://www.example.com) " 96 | ] 97 | }, 98 | { 99 | "cell_type": "markdown", 100 | "metadata": {}, 101 | "source": [ 102 | "## New paragraph" 103 | ] 104 | }, 105 | { 106 | "cell_type": "markdown", 107 | "metadata": {}, 108 | "source": [ 109 | "Separate the text of two paragraphs with an empty line.\n", 110 | "\n", 111 | "This is a new paragraph." 112 | ] 113 | }, 114 | { 115 | "cell_type": "markdown", 116 | "metadata": {}, 117 | "source": [ 118 | "## Verbatim" 119 | ] 120 | }, 121 | { 122 | "cell_type": "markdown", 123 | "metadata": {}, 124 | "source": [ 125 | "Text that start with four spaces is displayed as verbatim:\n", 126 | "\n", 127 | " def func(x):\n", 128 | " return x ** 2" 129 | ] 130 | }, 131 | { 132 | "cell_type": "markdown", 133 | "metadata": {}, 134 | "source": [ 135 | "## Table" 136 | ] 137 | }, 138 | { 139 | "cell_type": "markdown", 140 | "metadata": {}, 141 | "source": [ 142 | "The format for tables are as follows:\n", 143 | "\n", 144 | " | A | B | C |\n", 145 | " |---|---|---|\n", 146 | " | 1 | 2 | 3 |\n", 147 | " | 4 | 5 | 6 |\n", 148 | "\n", 149 | "| A | B | C |\n", 150 | "|---|---|---|\n", 151 | "| 1 | 2 | 3 |\n", 152 | "| 4 | 5 | 6 |" 153 | ] 154 | }, 155 | { 156 | "cell_type": "markdown", 157 | "metadata": {}, 158 | "source": [ 159 | "## Horizontal line" 160 | ] 161 | }, 162 | { 163 | "cell_type": "markdown", 164 | "metadata": {}, 165 | "source": [ 166 | "A line with three dashes `---` is shown as a horizontal line:\n", 167 | "\n", 168 | "---" 169 | ] 170 | }, 171 | { 172 | "cell_type": "markdown", 173 | "metadata": {}, 174 | "source": [ 175 | "## Headings" 176 | ] 177 | }, 178 | { 179 | "cell_type": "markdown", 180 | "metadata": {}, 181 | "source": [ 182 | "Lines starting with one `#` is a heading level 1, `##` is heading level 2, `###` is heading level 3, etc.\n", 183 | "\n", 184 | "# Level 1 heading\n", 185 | "## Level 2 heading\n", 186 | "### Level 3 heading" 187 | ] 188 | }, 189 | { 190 | "cell_type": "markdown", 191 | "metadata": {}, 192 | "source": [ 193 | "## Block quote" 194 | ] 195 | }, 196 | { 197 | "cell_type": "markdown", 198 | "metadata": {}, 199 | "source": [ 200 | "Lines that start with `>` are displayed as a block quote:\n", 201 | "\n", 202 | "> Text here is indented and offset\n", 203 | "> from the main text body." 204 | ] 205 | }, 206 | { 207 | "cell_type": "markdown", 208 | "metadata": {}, 209 | "source": [ 210 | "## Unordered list" 211 | ] 212 | }, 213 | { 214 | "cell_type": "markdown", 215 | "metadata": {}, 216 | "source": [ 217 | "Unordered lists are created by starting lines with `*`\n", 218 | "\n", 219 | "* Item one\n", 220 | "* Item two\n", 221 | "* Item three" 222 | ] 223 | }, 224 | { 225 | "cell_type": "markdown", 226 | "metadata": {}, 227 | "source": [ 228 | "## Ordered list" 229 | ] 230 | }, 231 | { 232 | "cell_type": "markdown", 233 | "metadata": {}, 234 | "source": [ 235 | "Ordered lists are created by simply enumerating lines with numbers followed a period: 1. ..., 2. ..., etc.\n", 236 | "1. Item one\n", 237 | "2. Item two\n", 238 | "3. Item three" 239 | ] 240 | }, 241 | { 242 | "cell_type": "markdown", 243 | "metadata": {}, 244 | "source": [ 245 | "## Image" 246 | ] 247 | }, 248 | { 249 | "cell_type": "markdown", 250 | "metadata": {}, 251 | "source": [ 252 | "Images can be included using `![Alternative text](image-file.png)` or `![Alternative text](http://www.example.com/image.png)`:\n", 253 | "\n", 254 | "![Alternative text](image-file.png)\n", 255 | "\n", 256 | "![Alternative text](http://www.example.com/image.png)" 257 | ] 258 | }, 259 | { 260 | "cell_type": "markdown", 261 | "metadata": {}, 262 | "source": [ 263 | "## LaTeX" 264 | ] 265 | }, 266 | { 267 | "cell_type": "markdown", 268 | "metadata": {}, 269 | "source": [ 270 | "Inline LaTeX equations can be included using `$\\LaTeX$`: $\\LaTeX$\n", 271 | "\n", 272 | "Displayed LaTeX equations (centered, and on a new line): `$$\\LaTeX$$`\n", 273 | "\n", 274 | "$$\\LaTeX$$ \n", 275 | "\n", 276 | "It is also possible to use latex environments like equation, eqnarray, align:\n", 277 | "\n", 278 | "`\\begin{equation} x = 1 \\end{equation}`\n", 279 | "\n", 280 | "\\begin{equation} x = 1 \\end{equation}\n", 281 | "\n", 282 | "`\\begin{eqnarray} x = 2 \\end{eqnarray}`\n", 283 | "\n", 284 | "\\begin{eqnarray} x = 2 \\end{eqnarray}\n", 285 | "\n", 286 | "`\\begin{align} x = 3 \\end{align}`\n", 287 | "\n", 288 | "\\begin{align} x = 3 \\end{align}\n" 289 | ] 290 | }, 291 | { 292 | "cell_type": "markdown", 293 | "metadata": {}, 294 | "source": [ 295 | "## Versions" 296 | ] 297 | }, 298 | { 299 | "cell_type": "code", 300 | "execution_count": 1, 301 | "metadata": {}, 302 | "outputs": [], 303 | "source": [ 304 | "%reload_ext version_information" 305 | ] 306 | }, 307 | { 308 | "cell_type": "code", 309 | "execution_count": 2, 310 | "metadata": {}, 311 | "outputs": [ 312 | { 313 | "data": { 314 | "application/json": { 315 | "Software versions": [ 316 | { 317 | "module": "Python", 318 | "version": "3.10.12 64bit [Clang 14.0.6 ]" 319 | }, 320 | { 321 | "module": "IPython", 322 | "version": "8.12.0" 323 | }, 324 | { 325 | "module": "OS", 326 | "version": "macOS 10.15.7 x86_64 i386 64bit" 327 | } 328 | ] 329 | }, 330 | "text/html": [ 331 | "
SoftwareVersion
Python3.10.12 64bit [Clang 14.0.6 ]
IPython8.12.0
OSmacOS 10.15.7 x86\\_64 i386 64bit
Sat Nov 02 18:02:00 2024 JST
" 332 | ], 333 | "text/latex": [ 334 | "\\begin{tabular}{|l|l|}\\hline\n", 335 | "{\\bf Software} & {\\bf Version} \\\\ \\hline\\hline\n", 336 | "Python & 3.10.12 64bit [Clang 14.0.6 ] \\\\ \\hline\n", 337 | "IPython & 8.12.0 \\\\ \\hline\n", 338 | "OS & macOS 10.15.7 x86\\_64 i386 64bit \\\\ \\hline\n", 339 | "\\hline \\multicolumn{2}{|l|}{Sat Nov 02 18:02:00 2024 JST} \\\\ \\hline\n", 340 | "\\end{tabular}\n" 341 | ], 342 | "text/plain": [ 343 | "Software versions\n", 344 | "Python 3.10.12 64bit [Clang 14.0.6 ]\n", 345 | "IPython 8.12.0\n", 346 | "OS macOS 10.15.7 x86_64 i386 64bit\n", 347 | "Sat Nov 02 18:02:00 2024 JST" 348 | ] 349 | }, 350 | "execution_count": 2, 351 | "metadata": {}, 352 | "output_type": "execute_result" 353 | } 354 | ], 355 | "source": [ 356 | "%version_information" 357 | ] 358 | }, 359 | { 360 | "cell_type": "code", 361 | "execution_count": null, 362 | "metadata": {}, 363 | "outputs": [], 364 | "source": [] 365 | } 366 | ], 367 | "metadata": { 368 | "kernelspec": { 369 | "display_name": "npbook_py310", 370 | "language": "python", 371 | "name": "npbook_py310" 372 | }, 373 | "language_info": { 374 | "codemirror_mode": { 375 | "name": "ipython", 376 | "version": 3 377 | }, 378 | "file_extension": ".py", 379 | "mimetype": "text/x-python", 380 | "name": "python", 381 | "nbconvert_exporter": "python", 382 | "pygments_lexer": "ipython3", 383 | "version": "3.10.12" 384 | } 385 | }, 386 | "nbformat": 4, 387 | "nbformat_minor": 4 388 | } 389 | -------------------------------------------------------------------------------- /ch01-code-listing.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Chapter 1: Computing with Python" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Robert Johansson\n", 15 | "\n", 16 | "Source code listings for [Numerical Python - Scientific Computing and Data Science Applications with Numpy, SciPy and Matplotlib](https://link.springer.com/book/10.1007/979-8-8688-0413-7) (ISBN 979-8-8688-0412-0)." 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": {}, 22 | "source": [ 23 | "## Interpreter" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": 1, 29 | "metadata": { 30 | "tags": [] 31 | }, 32 | "outputs": [ 33 | { 34 | "name": "stdout", 35 | "output_type": "stream", 36 | "text": [ 37 | "Overwriting hello.py\n" 38 | ] 39 | } 40 | ], 41 | "source": [ 42 | "%%writefile hello.py\n", 43 | "print(\"Hello from Python!\")" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 2, 49 | "metadata": { 50 | "tags": [] 51 | }, 52 | "outputs": [ 53 | { 54 | "name": "stdout", 55 | "output_type": "stream", 56 | "text": [ 57 | "Hello from Python!\n" 58 | ] 59 | } 60 | ], 61 | "source": [ 62 | "!python hello.py" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 3, 68 | "metadata": { 69 | "tags": [] 70 | }, 71 | "outputs": [ 72 | { 73 | "name": "stdout", 74 | "output_type": "stream", 75 | "text": [ 76 | "Python 3.10.12\n" 77 | ] 78 | } 79 | ], 80 | "source": [ 81 | "!python --version" 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "## Input and output caching\n", 89 | "\n", 90 | "(restart the kernel for the same output and cell numbers)" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": 1, 96 | "metadata": { 97 | "tags": [] 98 | }, 99 | "outputs": [ 100 | { 101 | "data": { 102 | "text/plain": [ 103 | "9" 104 | ] 105 | }, 106 | "execution_count": 1, 107 | "metadata": {}, 108 | "output_type": "execute_result" 109 | } 110 | ], 111 | "source": [ 112 | "3 * 3" 113 | ] 114 | }, 115 | { 116 | "cell_type": "code", 117 | "execution_count": 2, 118 | "metadata": { 119 | "tags": [] 120 | }, 121 | "outputs": [ 122 | { 123 | "data": { 124 | "text/plain": [ 125 | "'3 * 3'" 126 | ] 127 | }, 128 | "execution_count": 2, 129 | "metadata": {}, 130 | "output_type": "execute_result" 131 | } 132 | ], 133 | "source": [ 134 | "In[1]" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 3, 140 | "metadata": { 141 | "tags": [] 142 | }, 143 | "outputs": [ 144 | { 145 | "data": { 146 | "text/plain": [ 147 | "9" 148 | ] 149 | }, 150 | "execution_count": 3, 151 | "metadata": {}, 152 | "output_type": "execute_result" 153 | } 154 | ], 155 | "source": [ 156 | "Out[1]" 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": 4, 162 | "metadata": { 163 | "tags": [] 164 | }, 165 | "outputs": [ 166 | { 167 | "data": { 168 | "text/plain": [ 169 | "['', '3 * 3', 'In[1]', 'Out[1]', 'In']" 170 | ] 171 | }, 172 | "execution_count": 4, 173 | "metadata": {}, 174 | "output_type": "execute_result" 175 | } 176 | ], 177 | "source": [ 178 | "In" 179 | ] 180 | }, 181 | { 182 | "cell_type": "code", 183 | "execution_count": 5, 184 | "metadata": { 185 | "tags": [] 186 | }, 187 | "outputs": [ 188 | { 189 | "data": { 190 | "text/plain": [ 191 | "{1: 9, 2: '3 * 3', 3: 9, 4: ['', '3 * 3', 'In[1]', 'Out[1]', 'In', 'Out']}" 192 | ] 193 | }, 194 | "execution_count": 5, 195 | "metadata": {}, 196 | "output_type": "execute_result" 197 | } 198 | ], 199 | "source": [ 200 | "Out" 201 | ] 202 | }, 203 | { 204 | "cell_type": "code", 205 | "execution_count": 6, 206 | "metadata": { 207 | "tags": [] 208 | }, 209 | "outputs": [ 210 | { 211 | "data": { 212 | "text/plain": [ 213 | "3" 214 | ] 215 | }, 216 | "execution_count": 6, 217 | "metadata": {}, 218 | "output_type": "execute_result" 219 | } 220 | ], 221 | "source": [ 222 | "1+2" 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": 7, 228 | "metadata": { 229 | "tags": [] 230 | }, 231 | "outputs": [], 232 | "source": [ 233 | "1+2;" 234 | ] 235 | }, 236 | { 237 | "cell_type": "code", 238 | "execution_count": 8, 239 | "metadata": { 240 | "tags": [] 241 | }, 242 | "outputs": [], 243 | "source": [ 244 | "x = 1" 245 | ] 246 | }, 247 | { 248 | "cell_type": "code", 249 | "execution_count": 9, 250 | "metadata": { 251 | "tags": [] 252 | }, 253 | "outputs": [ 254 | { 255 | "data": { 256 | "text/plain": [ 257 | "2" 258 | ] 259 | }, 260 | "execution_count": 9, 261 | "metadata": {}, 262 | "output_type": "execute_result" 263 | } 264 | ], 265 | "source": [ 266 | "x = 2; x" 267 | ] 268 | }, 269 | { 270 | "cell_type": "markdown", 271 | "metadata": {}, 272 | "source": [ 273 | "## Documentation" 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": 10, 279 | "metadata": { 280 | "tags": [] 281 | }, 282 | "outputs": [], 283 | "source": [ 284 | "import os" 285 | ] 286 | }, 287 | { 288 | "cell_type": "code", 289 | "execution_count": 11, 290 | "metadata": { 291 | "tags": [] 292 | }, 293 | "outputs": [], 294 | "source": [ 295 | "# try os.w" 296 | ] 297 | }, 298 | { 299 | "cell_type": "code", 300 | "execution_count": 12, 301 | "metadata": { 302 | "tags": [] 303 | }, 304 | "outputs": [], 305 | "source": [ 306 | "import math" 307 | ] 308 | }, 309 | { 310 | "cell_type": "code", 311 | "execution_count": 13, 312 | "metadata": { 313 | "tags": [] 314 | }, 315 | "outputs": [ 316 | { 317 | "data": { 318 | "text/plain": [ 319 | "\u001b[0;31mSignature:\u001b[0m \u001b[0mmath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcos\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m/\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 320 | "\u001b[0;31mDocstring:\u001b[0m Return the cosine of x (measured in radians).\n", 321 | "\u001b[0;31mType:\u001b[0m builtin_function_or_method" 322 | ] 323 | }, 324 | "metadata": {}, 325 | "output_type": "display_data" 326 | } 327 | ], 328 | "source": [ 329 | "math.cos?" 330 | ] 331 | }, 332 | { 333 | "cell_type": "markdown", 334 | "metadata": {}, 335 | "source": [ 336 | "## Interaction with System Shell" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": 14, 342 | "metadata": { 343 | "tags": [] 344 | }, 345 | "outputs": [], 346 | "source": [ 347 | "!touch file1.py file2.py file3.py" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": 15, 353 | "metadata": { 354 | "tags": [] 355 | }, 356 | "outputs": [ 357 | { 358 | "name": "stdout", 359 | "output_type": "stream", 360 | "text": [ 361 | "file1.py file2.py file3.py\n" 362 | ] 363 | } 364 | ], 365 | "source": [ 366 | "!ls file*" 367 | ] 368 | }, 369 | { 370 | "cell_type": "code", 371 | "execution_count": 16, 372 | "metadata": { 373 | "tags": [] 374 | }, 375 | "outputs": [], 376 | "source": [ 377 | "files = !ls file*" 378 | ] 379 | }, 380 | { 381 | "cell_type": "code", 382 | "execution_count": 17, 383 | "metadata": { 384 | "tags": [] 385 | }, 386 | "outputs": [ 387 | { 388 | "data": { 389 | "text/plain": [ 390 | "3" 391 | ] 392 | }, 393 | "execution_count": 17, 394 | "metadata": {}, 395 | "output_type": "execute_result" 396 | } 397 | ], 398 | "source": [ 399 | "len(files)" 400 | ] 401 | }, 402 | { 403 | "cell_type": "code", 404 | "execution_count": 18, 405 | "metadata": { 406 | "tags": [] 407 | }, 408 | "outputs": [ 409 | { 410 | "data": { 411 | "text/plain": [ 412 | "['file1.py', 'file2.py', 'file3.py']" 413 | ] 414 | }, 415 | "execution_count": 18, 416 | "metadata": {}, 417 | "output_type": "execute_result" 418 | } 419 | ], 420 | "source": [ 421 | "files" 422 | ] 423 | }, 424 | { 425 | "cell_type": "code", 426 | "execution_count": 19, 427 | "metadata": { 428 | "tags": [] 429 | }, 430 | "outputs": [], 431 | "source": [ 432 | "file = \"file1.py\"" 433 | ] 434 | }, 435 | { 436 | "cell_type": "code", 437 | "execution_count": 20, 438 | "metadata": { 439 | "tags": [] 440 | }, 441 | "outputs": [ 442 | { 443 | "name": "stdout", 444 | "output_type": "stream", 445 | "text": [ 446 | "-rw-------@ 1 rob staff 0 Nov 2 17:58 file1.py\n" 447 | ] 448 | } 449 | ], 450 | "source": [ 451 | "!ls -l $file" 452 | ] 453 | }, 454 | { 455 | "cell_type": "markdown", 456 | "metadata": {}, 457 | "source": [ 458 | "## Running scripts from the IPython console" 459 | ] 460 | }, 461 | { 462 | "cell_type": "code", 463 | "execution_count": 21, 464 | "metadata": { 465 | "tags": [] 466 | }, 467 | "outputs": [ 468 | { 469 | "name": "stdout", 470 | "output_type": "stream", 471 | "text": [ 472 | "Overwriting fib.py\n" 473 | ] 474 | } 475 | ], 476 | "source": [ 477 | "%%writefile fib.py\n", 478 | "\n", 479 | "def fib(N): \n", 480 | " \"\"\" \n", 481 | " Return a list of the first N Fibonacci numbers.\n", 482 | " \"\"\" \n", 483 | " f0, f1 = 0, 1\n", 484 | " f = [1] * N\n", 485 | " for n in range(1, N):\n", 486 | " f[n] = f0 + f1\n", 487 | " f0, f1 = f1, f[n]\n", 488 | "\n", 489 | " return f\n", 490 | "\n", 491 | "print(fib(10))" 492 | ] 493 | }, 494 | { 495 | "cell_type": "code", 496 | "execution_count": 22, 497 | "metadata": { 498 | "tags": [] 499 | }, 500 | "outputs": [ 501 | { 502 | "name": "stdout", 503 | "output_type": "stream", 504 | "text": [ 505 | "[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\n" 506 | ] 507 | } 508 | ], 509 | "source": [ 510 | "!python fib.py" 511 | ] 512 | }, 513 | { 514 | "cell_type": "code", 515 | "execution_count": 23, 516 | "metadata": { 517 | "tags": [] 518 | }, 519 | "outputs": [ 520 | { 521 | "name": "stdout", 522 | "output_type": "stream", 523 | "text": [ 524 | "[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\n" 525 | ] 526 | } 527 | ], 528 | "source": [ 529 | "%run fib.py" 530 | ] 531 | }, 532 | { 533 | "cell_type": "code", 534 | "execution_count": 24, 535 | "metadata": { 536 | "tags": [] 537 | }, 538 | "outputs": [ 539 | { 540 | "data": { 541 | "text/plain": [ 542 | "[1, 1, 2, 3, 5, 8]" 543 | ] 544 | }, 545 | "execution_count": 24, 546 | "metadata": {}, 547 | "output_type": "execute_result" 548 | } 549 | ], 550 | "source": [ 551 | "fib(6)" 552 | ] 553 | }, 554 | { 555 | "cell_type": "markdown", 556 | "metadata": {}, 557 | "source": [ 558 | "## Debugger" 559 | ] 560 | }, 561 | { 562 | "cell_type": "code", 563 | "execution_count": 25, 564 | "metadata": { 565 | "tags": [] 566 | }, 567 | "outputs": [ 568 | { 569 | "ename": "TypeError", 570 | "evalue": "can't multiply sequence by non-int of type 'float'", 571 | "output_type": "error", 572 | "traceback": [ 573 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 574 | "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", 575 | "Cell \u001b[0;32mIn[25], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mfib\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m1.0\u001b[39;49m\u001b[43m)\u001b[49m\n", 576 | "File \u001b[0;32m~/OneDrive/Desktop/npbook-ed3/code/numerical-python-code-ed3-v2-github/fib.py:7\u001b[0m, in \u001b[0;36mfib\u001b[0;34m(N)\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\" \u001b[39;00m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;124;03mReturn a list of the first N Fibonacci numbers.\u001b[39;00m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m \n\u001b[1;32m 6\u001b[0m f0, f1 \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m1\u001b[39m\n\u001b[0;32m----> 7\u001b[0m f \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mN\u001b[49m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m n \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;241m1\u001b[39m, N):\n\u001b[1;32m 9\u001b[0m f[n] \u001b[38;5;241m=\u001b[39m f0 \u001b[38;5;241m+\u001b[39m f1\n", 577 | "\u001b[0;31mTypeError\u001b[0m: can't multiply sequence by non-int of type 'float'" 578 | ] 579 | } 580 | ], 581 | "source": [ 582 | "fib(1.0)" 583 | ] 584 | }, 585 | { 586 | "cell_type": "code", 587 | "execution_count": 26, 588 | "metadata": { 589 | "tags": [] 590 | }, 591 | "outputs": [ 592 | { 593 | "name": "stdout", 594 | "output_type": "stream", 595 | "text": [ 596 | "> \u001b[0;32m/Users/rob/OneDrive/Desktop/npbook-ed3/code/numerical-python-code-ed3-v2-github/fib.py\u001b[0m(7)\u001b[0;36mfib\u001b[0;34m()\u001b[0m\n", 597 | "\u001b[0;32m 5 \u001b[0;31m \"\"\" \n", 598 | "\u001b[0m\u001b[0;32m 6 \u001b[0;31m \u001b[0mf0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 599 | "\u001b[0m\u001b[0;32m----> 7 \u001b[0;31m \u001b[0mf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mN\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 600 | "\u001b[0m\u001b[0;32m 8 \u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mn\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mN\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 601 | "\u001b[0m\u001b[0;32m 9 \u001b[0;31m \u001b[0mf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mf0\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mf1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 602 | "\u001b[0m\n" 603 | ] 604 | }, 605 | { 606 | "name": "stdin", 607 | "output_type": "stream", 608 | "text": [ 609 | "ipdb> N\n" 610 | ] 611 | }, 612 | { 613 | "name": "stdout", 614 | "output_type": "stream", 615 | "text": [ 616 | "1.0\n" 617 | ] 618 | }, 619 | { 620 | "name": "stdin", 621 | "output_type": "stream", 622 | "text": [ 623 | "ipdb> q\n" 624 | ] 625 | } 626 | ], 627 | "source": [ 628 | "%debug" 629 | ] 630 | }, 631 | { 632 | "cell_type": "markdown", 633 | "metadata": {}, 634 | "source": [ 635 | "## Timing and profiling code" 636 | ] 637 | }, 638 | { 639 | "cell_type": "code", 640 | "execution_count": 27, 641 | "metadata": { 642 | "tags": [] 643 | }, 644 | "outputs": [ 645 | { 646 | "name": "stdout", 647 | "output_type": "stream", 648 | "text": [ 649 | "11.6 µs ± 532 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n" 650 | ] 651 | } 652 | ], 653 | "source": [ 654 | "%timeit fib(100)" 655 | ] 656 | }, 657 | { 658 | "cell_type": "code", 659 | "execution_count": 28, 660 | "metadata": { 661 | "tags": [] 662 | }, 663 | "outputs": [ 664 | { 665 | "name": "stdout", 666 | "output_type": "stream", 667 | "text": [ 668 | "CPU times: user 21 µs, sys: 1 µs, total: 22 µs\n", 669 | "Wall time: 24.8 µs\n" 670 | ] 671 | } 672 | ], 673 | "source": [ 674 | "result = %time fib(100)" 675 | ] 676 | }, 677 | { 678 | "cell_type": "code", 679 | "execution_count": 29, 680 | "metadata": { 681 | "tags": [] 682 | }, 683 | "outputs": [ 684 | { 685 | "data": { 686 | "text/plain": [ 687 | "100" 688 | ] 689 | }, 690 | "execution_count": 29, 691 | "metadata": {}, 692 | "output_type": "execute_result" 693 | } 694 | ], 695 | "source": [ 696 | "len(result)" 697 | ] 698 | }, 699 | { 700 | "cell_type": "code", 701 | "execution_count": 30, 702 | "metadata": { 703 | "tags": [] 704 | }, 705 | "outputs": [], 706 | "source": [ 707 | "import numpy as np\n", 708 | "\n", 709 | "def random_walker_max_distance(M, N):\n", 710 | " \"\"\"\n", 711 | " Simulate N random walkers taking M steps, and return the largest distance\n", 712 | " from the starting point achieved by any of the random walkers.\n", 713 | " \"\"\"\n", 714 | " trajectories = [np.random.randn(M).cumsum() for _ in range(N)]\n", 715 | " return np.max(np.abs(trajectories))" 716 | ] 717 | }, 718 | { 719 | "cell_type": "code", 720 | "execution_count": 31, 721 | "metadata": { 722 | "tags": [] 723 | }, 724 | "outputs": [ 725 | { 726 | "name": "stdout", 727 | "output_type": "stream", 728 | "text": [ 729 | " " 730 | ] 731 | }, 732 | { 733 | "data": { 734 | "text/plain": [ 735 | " 20013 function calls in 0.335 seconds\n", 736 | "\n", 737 | " Ordered by: internal time\n", 738 | "\n", 739 | " ncalls tottime percall cumtime percall filename:lineno(function)\n", 740 | " 10000 0.184 0.000 0.184 0.000 {method 'randn' of 'numpy.random.mtrand.RandomState' objects}\n", 741 | " 10000 0.071 0.000 0.071 0.000 {method 'cumsum' of 'numpy.ndarray' objects}\n", 742 | " 1 0.051 0.051 0.328 0.328 2615584822.py:3(random_walker_max_distance)\n", 743 | " 1 0.020 0.020 0.276 0.276 2615584822.py:8()\n", 744 | " 1 0.007 0.007 0.335 0.335 :1()\n", 745 | " 1 0.002 0.002 0.002 0.002 {method 'reduce' of 'numpy.ufunc' objects}\n", 746 | " 1 0.000 0.000 0.335 0.335 {built-in method builtins.exec}\n", 747 | " 1 0.000 0.000 0.002 0.002 fromnumeric.py:69(_wrapreduction)\n", 748 | " 1 0.000 0.000 0.002 0.002 <__array_function__ internals>:177(amax)\n", 749 | " 1 0.000 0.000 0.002 0.002 fromnumeric.py:2675(amax)\n", 750 | " 1 0.000 0.000 0.002 0.002 {built-in method numpy.core._multiarray_umath.implement_array_function}\n", 751 | " 1 0.000 0.000 0.000 0.000 fromnumeric.py:70()\n", 752 | " 1 0.000 0.000 0.000 0.000 fromnumeric.py:2670(_amax_dispatcher)\n", 753 | " 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}\n", 754 | " 1 0.000 0.000 0.000 0.000 {method 'items' of 'dict' objects}" 755 | ] 756 | }, 757 | "metadata": {}, 758 | "output_type": "display_data" 759 | } 760 | ], 761 | "source": [ 762 | "%prun random_walker_max_distance(400, 10000)" 763 | ] 764 | }, 765 | { 766 | "cell_type": "markdown", 767 | "metadata": {}, 768 | "source": [ 769 | "## Jupyter notebook" 770 | ] 771 | }, 772 | { 773 | "cell_type": "code", 774 | "execution_count": 32, 775 | "metadata": { 776 | "tags": [] 777 | }, 778 | "outputs": [], 779 | "source": [ 780 | "from IPython.display import display, Image, HTML, Math" 781 | ] 782 | }, 783 | { 784 | "cell_type": "code", 785 | "execution_count": 33, 786 | "metadata": { 787 | "tags": [] 788 | }, 789 | "outputs": [ 790 | { 791 | "data": { 792 | "text/html": [ 793 | "" 794 | ], 795 | "text/plain": [ 796 | "" 797 | ] 798 | }, 799 | "execution_count": 33, 800 | "metadata": {}, 801 | "output_type": "execute_result" 802 | } 803 | ], 804 | "source": [ 805 | "Image(url='http://python.org/images/python-logo.gif')" 806 | ] 807 | }, 808 | { 809 | "cell_type": "code", 810 | "execution_count": 34, 811 | "metadata": { 812 | "tags": [] 813 | }, 814 | "outputs": [], 815 | "source": [ 816 | "import scipy, numpy, matplotlib\n", 817 | "modules = [numpy, matplotlib, scipy]\n", 818 | "row = \" %s %s \"\n", 819 | "rows = \"\\n\".join([row % (module.__name__, module.__version__) for module in modules])\n", 820 | "s = \" %s
LibraryVersion
\" % rows" 821 | ] 822 | }, 823 | { 824 | "cell_type": "code", 825 | "execution_count": 35, 826 | "metadata": { 827 | "tags": [] 828 | }, 829 | "outputs": [ 830 | { 831 | "data": { 832 | "text/plain": [ 833 | "'\\n\\n
LibraryVersion
numpy 1.22.3
matplotlib 3.7.1
scipy 1.7.3
'" 834 | ] 835 | }, 836 | "execution_count": 35, 837 | "metadata": {}, 838 | "output_type": "execute_result" 839 | } 840 | ], 841 | "source": [ 842 | "s" 843 | ] 844 | }, 845 | { 846 | "cell_type": "code", 847 | "execution_count": 36, 848 | "metadata": { 849 | "tags": [] 850 | }, 851 | "outputs": [ 852 | { 853 | "data": { 854 | "text/html": [ 855 | "\n", 856 | "\n", 857 | "
LibraryVersion
numpy 1.22.3
matplotlib 3.7.1
scipy 1.7.3
" 858 | ], 859 | "text/plain": [ 860 | "" 861 | ] 862 | }, 863 | "execution_count": 36, 864 | "metadata": {}, 865 | "output_type": "execute_result" 866 | } 867 | ], 868 | "source": [ 869 | "HTML(s)" 870 | ] 871 | }, 872 | { 873 | "cell_type": "code", 874 | "execution_count": 37, 875 | "metadata": { 876 | "tags": [] 877 | }, 878 | "outputs": [], 879 | "source": [ 880 | "class HTMLDisplayer(object):\n", 881 | " def __init__(self, code):\n", 882 | " self.code = code\n", 883 | " \n", 884 | " def _repr_html_(self):\n", 885 | " return self.code" 886 | ] 887 | }, 888 | { 889 | "cell_type": "code", 890 | "execution_count": 38, 891 | "metadata": { 892 | "tags": [] 893 | }, 894 | "outputs": [ 895 | { 896 | "data": { 897 | "text/html": [ 898 | "\n", 899 | "\n", 900 | "
LibraryVersion
numpy 1.22.3
matplotlib 3.7.1
scipy 1.7.3
" 901 | ], 902 | "text/plain": [ 903 | "<__main__.HTMLDisplayer at 0x7fd091cbe680>" 904 | ] 905 | }, 906 | "execution_count": 38, 907 | "metadata": {}, 908 | "output_type": "execute_result" 909 | } 910 | ], 911 | "source": [ 912 | "HTMLDisplayer(s)" 913 | ] 914 | }, 915 | { 916 | "cell_type": "code", 917 | "execution_count": 39, 918 | "metadata": { 919 | "tags": [] 920 | }, 921 | "outputs": [ 922 | { 923 | "data": { 924 | "text/latex": [ 925 | "$\\displaystyle \\hat{H} = -\\frac{1}{2}\\epsilon \\hat{\\sigma}_z-\\frac{1}{2}\\delta \\hat{\\sigma}_x$" 926 | ], 927 | "text/plain": [ 928 | "" 929 | ] 930 | }, 931 | "execution_count": 39, 932 | "metadata": {}, 933 | "output_type": "execute_result" 934 | } 935 | ], 936 | "source": [ 937 | "Math(r'\\hat{H} = -\\frac{1}{2}\\epsilon \\hat{\\sigma}_z-\\frac{1}{2}\\delta \\hat{\\sigma}_x')" 938 | ] 939 | }, 940 | { 941 | "cell_type": "code", 942 | "execution_count": 40, 943 | "metadata": { 944 | "tags": [] 945 | }, 946 | "outputs": [], 947 | "source": [ 948 | "class QubitHamiltonian(object):\n", 949 | " def __init__(self, epsilon, delta):\n", 950 | " self.epsilon = epsilon\n", 951 | " self.delta = delta\n", 952 | "\n", 953 | " def _repr_latex_(self):\n", 954 | " return \"$\\hat{H} = -%.2f\\hat{\\sigma}_z-%.2f\\hat{\\sigma}_x$\" % \\\n", 955 | " (self.epsilon/2, self.delta/2)" 956 | ] 957 | }, 958 | { 959 | "cell_type": "code", 960 | "execution_count": 41, 961 | "metadata": { 962 | "tags": [] 963 | }, 964 | "outputs": [ 965 | { 966 | "data": { 967 | "text/latex": [ 968 | "$\\hat{H} = -0.25\\hat{\\sigma}_z-0.12\\hat{\\sigma}_x$" 969 | ], 970 | "text/plain": [ 971 | "<__main__.QubitHamiltonian at 0x7fd093a851e0>" 972 | ] 973 | }, 974 | "execution_count": 41, 975 | "metadata": {}, 976 | "output_type": "execute_result" 977 | } 978 | ], 979 | "source": [ 980 | "QubitHamiltonian(0.5, 0.25)" 981 | ] 982 | }, 983 | { 984 | "cell_type": "code", 985 | "execution_count": 42, 986 | "metadata": { 987 | "tags": [] 988 | }, 989 | "outputs": [], 990 | "source": [ 991 | "import matplotlib.pyplot as plt\n", 992 | "import numpy as np\n", 993 | "from scipy import stats\n", 994 | "\n", 995 | "def f(mu):\n", 996 | " X = stats.norm(loc=mu, scale=np.sqrt(mu))\n", 997 | " N = stats.poisson(mu)\n", 998 | " x = np.linspace(0, X.ppf(0.999))\n", 999 | " n = np.arange(0, x[-1])\n", 1000 | "\n", 1001 | " fig, ax = plt.subplots()\n", 1002 | " ax.plot(x, X.pdf(x), color='black', lw=2, label=\"Normal($\\mu=%d, \\sigma^2=%d$)\" % (mu, mu))\n", 1003 | " ax.bar(n, N.pmf(n), align='edge', label=r\"Poisson($\\lambda=%d$)\" % mu)\n", 1004 | " ax.set_ylim(0, X.pdf(x).max() * 1.25)\n", 1005 | " ax.legend(loc=2, ncol=2)\n", 1006 | " plt.close(fig)\n", 1007 | " return fig" 1008 | ] 1009 | }, 1010 | { 1011 | "cell_type": "code", 1012 | "execution_count": 43, 1013 | "metadata": { 1014 | "tags": [] 1015 | }, 1016 | "outputs": [], 1017 | "source": [ 1018 | "from ipywidgets import interact\n", 1019 | "import ipywidgets as widgets" 1020 | ] 1021 | }, 1022 | { 1023 | "cell_type": "code", 1024 | "execution_count": 44, 1025 | "metadata": { 1026 | "tags": [] 1027 | }, 1028 | "outputs": [ 1029 | { 1030 | "data": { 1031 | "application/vnd.jupyter.widget-view+json": { 1032 | "model_id": "32de52fb68014fa792832416359e353e", 1033 | "version_major": 2, 1034 | "version_minor": 0 1035 | }, 1036 | "text/plain": [ 1037 | "interactive(children=(FloatSlider(value=1.0, description='mu', max=20.0, min=1.0, step=1.0), Output()), _dom_c…" 1038 | ] 1039 | }, 1040 | "metadata": {}, 1041 | "output_type": "display_data" 1042 | } 1043 | ], 1044 | "source": [ 1045 | "interact(f, mu=widgets.FloatSlider(min=1.0, max=20.0, step=1.0));" 1046 | ] 1047 | }, 1048 | { 1049 | "cell_type": "markdown", 1050 | "metadata": {}, 1051 | "source": [ 1052 | "## Jupyter nbconvert" 1053 | ] 1054 | }, 1055 | { 1056 | "cell_type": "code", 1057 | "execution_count": 45, 1058 | "metadata": {}, 1059 | "outputs": [ 1060 | { 1061 | "name": "stdout", 1062 | "output_type": "stream", 1063 | "text": [ 1064 | "[NbConvertApp] Converting notebook ch01-code-listing.ipynb to html\n", 1065 | "[NbConvertApp] Writing 649717 bytes to ch01-code-listing.html\n" 1066 | ] 1067 | } 1068 | ], 1069 | "source": [ 1070 | "!jupyter nbconvert --to html ch01-code-listing.ipynb" 1071 | ] 1072 | }, 1073 | { 1074 | "cell_type": "code", 1075 | "execution_count": 46, 1076 | "metadata": {}, 1077 | "outputs": [ 1078 | { 1079 | "name": "stdout", 1080 | "output_type": "stream", 1081 | "text": [ 1082 | "[NbConvertApp] Converting notebook ch01-code-listing.ipynb to pdf\n", 1083 | "[NbConvertApp] Writing 57494 bytes to notebook.tex\n", 1084 | "[NbConvertApp] Building PDF\n", 1085 | "[NbConvertApp] Running xelatex 3 times: ['xelatex', 'notebook.tex', '-quiet']\n", 1086 | "[NbConvertApp] Running bibtex 1 time: ['bibtex', 'notebook']\n", 1087 | "[NbConvertApp] WARNING | bibtex had problems, most likely because there were no citations\n", 1088 | "[NbConvertApp] PDF successfully created\n", 1089 | "[NbConvertApp] Writing 66341 bytes to ch01-code-listing.pdf\n" 1090 | ] 1091 | } 1092 | ], 1093 | "source": [ 1094 | "!jupyter nbconvert --to pdf ch01-code-listing.ipynb" 1095 | ] 1096 | }, 1097 | { 1098 | "cell_type": "code", 1099 | "execution_count": 47, 1100 | "metadata": {}, 1101 | "outputs": [ 1102 | { 1103 | "name": "stdout", 1104 | "output_type": "stream", 1105 | "text": [ 1106 | "Overwriting custom_template.tplx\n" 1107 | ] 1108 | } 1109 | ], 1110 | "source": [ 1111 | "%%writefile custom_template.tplx\n", 1112 | "((*- extends 'article.tplx' -*))\n", 1113 | "\n", 1114 | "((* block title *)) \\title{Document title} ((* endblock title *))\n", 1115 | "((* block author *)) \\author{Author's Name} ((* endblock author *))" 1116 | ] 1117 | }, 1118 | { 1119 | "cell_type": "code", 1120 | "execution_count": null, 1121 | "metadata": {}, 1122 | "outputs": [], 1123 | "source": [ 1124 | "!jupyter nbconvert ch01-code-listing.ipynb --to pdf --template custom_template.tplx" 1125 | ] 1126 | }, 1127 | { 1128 | "cell_type": "code", 1129 | "execution_count": 48, 1130 | "metadata": {}, 1131 | "outputs": [ 1132 | { 1133 | "name": "stdout", 1134 | "output_type": "stream", 1135 | "text": [ 1136 | "[NbConvertApp] Converting notebook ch01-code-listing.ipynb to python\n", 1137 | "[NbConvertApp] Writing 5152 bytes to ch01-code-listing.py\n" 1138 | ] 1139 | } 1140 | ], 1141 | "source": [ 1142 | "!jupyter nbconvert ch01-code-listing.ipynb --to python" 1143 | ] 1144 | }, 1145 | { 1146 | "cell_type": "markdown", 1147 | "metadata": {}, 1148 | "source": [ 1149 | "# Versions" 1150 | ] 1151 | }, 1152 | { 1153 | "cell_type": "code", 1154 | "execution_count": 49, 1155 | "metadata": { 1156 | "tags": [] 1157 | }, 1158 | "outputs": [ 1159 | { 1160 | "data": { 1161 | "application/json": { 1162 | "Software versions": [ 1163 | { 1164 | "module": "Python", 1165 | "version": "3.10.12 64bit [Clang 14.0.6 ]" 1166 | }, 1167 | { 1168 | "module": "IPython", 1169 | "version": "8.12.0" 1170 | }, 1171 | { 1172 | "module": "OS", 1173 | "version": "macOS 10.15.7 x86_64 i386 64bit" 1174 | }, 1175 | { 1176 | "module": "numpy", 1177 | "version": "1.22.3" 1178 | } 1179 | ] 1180 | }, 1181 | "text/html": [ 1182 | "
SoftwareVersion
Python3.10.12 64bit [Clang 14.0.6 ]
IPython8.12.0
OSmacOS 10.15.7 x86\\_64 i386 64bit
numpy1.22.3
Sat Nov 02 17:59:59 2024 JST
" 1183 | ], 1184 | "text/latex": [ 1185 | "\\begin{tabular}{|l|l|}\\hline\n", 1186 | "{\\bf Software} & {\\bf Version} \\\\ \\hline\\hline\n", 1187 | "Python & 3.10.12 64bit [Clang 14.0.6 ] \\\\ \\hline\n", 1188 | "IPython & 8.12.0 \\\\ \\hline\n", 1189 | "OS & macOS 10.15.7 x86\\_64 i386 64bit \\\\ \\hline\n", 1190 | "numpy & 1.22.3 \\\\ \\hline\n", 1191 | "\\hline \\multicolumn{2}{|l|}{Sat Nov 02 17:59:59 2024 JST} \\\\ \\hline\n", 1192 | "\\end{tabular}\n" 1193 | ], 1194 | "text/plain": [ 1195 | "Software versions\n", 1196 | "Python 3.10.12 64bit [Clang 14.0.6 ]\n", 1197 | "IPython 8.12.0\n", 1198 | "OS macOS 10.15.7 x86_64 i386 64bit\n", 1199 | "numpy 1.22.3\n", 1200 | "Sat Nov 02 17:59:59 2024 JST" 1201 | ] 1202 | }, 1203 | "execution_count": 49, 1204 | "metadata": {}, 1205 | "output_type": "execute_result" 1206 | } 1207 | ], 1208 | "source": [ 1209 | "%reload_ext version_information\n", 1210 | "%version_information numpy" 1211 | ] 1212 | } 1213 | ], 1214 | "metadata": { 1215 | "kernelspec": { 1216 | "display_name": "Python 3 (ipykernel)", 1217 | "language": "python", 1218 | "name": "python3" 1219 | }, 1220 | "language_info": { 1221 | "codemirror_mode": { 1222 | "name": "ipython", 1223 | "version": 3 1224 | }, 1225 | "file_extension": ".py", 1226 | "mimetype": "text/x-python", 1227 | "name": "python", 1228 | "nbconvert_exporter": "python", 1229 | "pygments_lexer": "ipython3", 1230 | "version": "3.10.12" 1231 | } 1232 | }, 1233 | "nbformat": 4, 1234 | "nbformat_minor": 4 1235 | } 1236 | -------------------------------------------------------------------------------- /tokyo-metro.json: -------------------------------------------------------------------------------- 1 | { 2 | "C": { 3 | "color": "#149848", 4 | "transfers": [ 5 | [ 6 | "C3", 7 | "F15" 8 | ], 9 | [ 10 | "C4", 11 | "Z2" 12 | ], 13 | [ 14 | "C4", 15 | "G2" 16 | ], 17 | [ 18 | "C7", 19 | "M14" 20 | ], 21 | [ 22 | "C7", 23 | "N6" 24 | ], 25 | [ 26 | "C7", 27 | "G6" 28 | ], 29 | [ 30 | "C8", 31 | "M15" 32 | ], 33 | [ 34 | "C8", 35 | "H6" 36 | ], 37 | [ 38 | "C9", 39 | "H7" 40 | ], 41 | [ 42 | "C9", 43 | "Y18" 44 | ], 45 | [ 46 | "C11", 47 | "T9" 48 | ], 49 | [ 50 | "C11", 51 | "M18" 52 | ], 53 | [ 54 | "C11", 55 | "Z8" 56 | ], 57 | [ 58 | "C12", 59 | "M19" 60 | ], 61 | [ 62 | "C18", 63 | "H21" 64 | ] 65 | ], 66 | "travel_times": [ 67 | [ 68 | "C1", 69 | "C2", 70 | 2 71 | ], 72 | [ 73 | "C2", 74 | "C3", 75 | 2 76 | ], 77 | [ 78 | "C3", 79 | "C4", 80 | 1 81 | ], 82 | [ 83 | "C4", 84 | "C5", 85 | 2 86 | ], 87 | [ 88 | "C5", 89 | "C6", 90 | 2 91 | ], 92 | [ 93 | "C6", 94 | "C7", 95 | 2 96 | ], 97 | [ 98 | "C7", 99 | "C8", 100 | 1 101 | ], 102 | [ 103 | "C8", 104 | "C9", 105 | 3 106 | ], 107 | [ 108 | "C9", 109 | "C10", 110 | 1 111 | ], 112 | [ 113 | "C10", 114 | "C11", 115 | 2 116 | ], 117 | [ 118 | "C11", 119 | "C12", 120 | 2 121 | ], 122 | [ 123 | "C12", 124 | "C13", 125 | 2 126 | ], 127 | [ 128 | "C13", 129 | "C14", 130 | 2 131 | ], 132 | [ 133 | "C14", 134 | "C15", 135 | 2 136 | ], 137 | [ 138 | "C15", 139 | "C16", 140 | 2 141 | ], 142 | [ 143 | "C16", 144 | "C17", 145 | 3 146 | ], 147 | [ 148 | "C17", 149 | "C18", 150 | 3 151 | ], 152 | [ 153 | "C18", 154 | "C19", 155 | 3 156 | ] 157 | ] 158 | }, 159 | "G": { 160 | "color": "#f59230", 161 | "transfers": [ 162 | [ 163 | "G1", 164 | "Z1" 165 | ], 166 | [ 167 | "G1", 168 | "F16" 169 | ], 170 | [ 171 | "G2", 172 | "Z2" 173 | ], 174 | [ 175 | "G2", 176 | "C4" 177 | ], 178 | [ 179 | "G4", 180 | "Z3" 181 | ], 182 | [ 183 | "G5", 184 | "M13" 185 | ], 186 | [ 187 | "G5", 188 | "Y16" 189 | ], 190 | [ 191 | "G5", 192 | "Z4" 193 | ], 194 | [ 195 | "G5", 196 | "N7" 197 | ], 198 | [ 199 | "G6", 200 | "N6" 201 | ], 202 | [ 203 | "G6", 204 | "M14" 205 | ], 206 | [ 207 | "G6", 208 | "C7" 209 | ], 210 | [ 211 | "G9", 212 | "M16" 213 | ], 214 | [ 215 | "G9", 216 | "H8" 217 | ], 218 | [ 219 | "G11", 220 | "T10" 221 | ], 222 | [ 223 | "G12", 224 | "Z9" 225 | ], 226 | [ 227 | "G15", 228 | "H16" 229 | ], 230 | [ 231 | "G16", 232 | "H17" 233 | ] 234 | ], 235 | "travel_times": [ 236 | [ 237 | "G1", 238 | "G2", 239 | 2 240 | ], 241 | [ 242 | "G2", 243 | "G3", 244 | 1 245 | ], 246 | [ 247 | "G3", 248 | "G4", 249 | 2 250 | ], 251 | [ 252 | "G4", 253 | "G5", 254 | 2 255 | ], 256 | [ 257 | "G5", 258 | "G6", 259 | 2 260 | ], 261 | [ 262 | "G6", 263 | "G7", 264 | 2 265 | ], 266 | [ 267 | "G7", 268 | "G8", 269 | 2 270 | ], 271 | [ 272 | "G8", 273 | "G9", 274 | 2 275 | ], 276 | [ 277 | "G9", 278 | "G10", 279 | 1 280 | ], 281 | [ 282 | "G10", 283 | "G11", 284 | 2 285 | ], 286 | [ 287 | "G11", 288 | "G12", 289 | 2 290 | ], 291 | [ 292 | "G12", 293 | "G13", 294 | 1 295 | ], 296 | [ 297 | "G13", 298 | "G14", 299 | 2 300 | ], 301 | [ 302 | "G14", 303 | "G15", 304 | 2 305 | ], 306 | [ 307 | "G15", 308 | "G16", 309 | 1 310 | ], 311 | [ 312 | "G16", 313 | "G17", 314 | 2 315 | ], 316 | [ 317 | "G17", 318 | "G18", 319 | 1 320 | ], 321 | [ 322 | "G18", 323 | "G19", 324 | 2 325 | ] 326 | ] 327 | }, 328 | "F": { 329 | "color": "#b96528", 330 | "transfers": [ 331 | [ 332 | "F1", 333 | "Y1" 334 | ], 335 | [ 336 | "F2", 337 | "Y2" 338 | ], 339 | [ 340 | "F3", 341 | "Y3" 342 | ], 343 | [ 344 | "F4", 345 | "Y4" 346 | ], 347 | [ 348 | "F5", 349 | "Y5" 350 | ], 351 | [ 352 | "F6", 353 | "Y6" 354 | ], 355 | [ 356 | "F7", 357 | "Y7" 358 | ], 359 | [ 360 | "F8", 361 | "Y8" 362 | ], 363 | [ 364 | "F9", 365 | "Y9" 366 | ], 367 | [ 368 | "F9", 369 | "M25" 370 | ], 371 | [ 372 | "F13", 373 | "M9" 374 | ], 375 | [ 376 | "F15", 377 | "C3" 378 | ], 379 | [ 380 | "F16", 381 | "Z1" 382 | ], 383 | [ 384 | "F16", 385 | "G1" 386 | ] 387 | ], 388 | "travel_times": [ 389 | [ 390 | "F1", 391 | "F2", 392 | 3 393 | ], 394 | [ 395 | "F2", 396 | "F3", 397 | 2 398 | ], 399 | [ 400 | "F3", 401 | "F4", 402 | 3 403 | ], 404 | [ 405 | "F4", 406 | "F5", 407 | 2 408 | ], 409 | [ 410 | "F5", 411 | "F6", 412 | 2 413 | ], 414 | [ 415 | "F6", 416 | "F7", 417 | 2 418 | ], 419 | [ 420 | "F7", 421 | "F8", 422 | 2 423 | ], 424 | [ 425 | "F8", 426 | "F9", 427 | 2 428 | ], 429 | [ 430 | "F9", 431 | "F10", 432 | 3 433 | ], 434 | [ 435 | "F10", 436 | "F11", 437 | 2 438 | ], 439 | [ 440 | "F11", 441 | "F12", 442 | 2 443 | ], 444 | [ 445 | "F12", 446 | "F13", 447 | 2 448 | ], 449 | [ 450 | "F13", 451 | "F14", 452 | 3 453 | ], 454 | [ 455 | "F14", 456 | "F15", 457 | 2 458 | ], 459 | [ 460 | "F15", 461 | "F16", 462 | 2 463 | ] 464 | ] 465 | }, 466 | "H": { 467 | "color": "#9cacb5", 468 | "transfers": [ 469 | [ 470 | "H6", 471 | "M15" 472 | ], 473 | [ 474 | "H6", 475 | "C8" 476 | ], 477 | [ 478 | "H7", 479 | "Y18" 480 | ], 481 | [ 482 | "H7", 483 | "C9" 484 | ], 485 | [ 486 | "H8", 487 | "M16" 488 | ], 489 | [ 490 | "H8", 491 | "G9" 492 | ], 493 | [ 494 | "H12", 495 | "T11" 496 | ], 497 | [ 498 | "H16", 499 | "G15" 500 | ], 501 | [ 502 | "H17", 503 | "G16" 504 | ], 505 | [ 506 | "H21", 507 | "C18" 508 | ] 509 | ], 510 | "travel_times": [ 511 | [ 512 | "H1", 513 | "H2", 514 | 3 515 | ], 516 | [ 517 | "H2", 518 | "H3", 519 | 3 520 | ], 521 | [ 522 | "H3", 523 | "H4", 524 | 3 525 | ], 526 | [ 527 | "H4", 528 | "H5", 529 | 3 530 | ], 531 | [ 532 | "H5", 533 | "H6", 534 | 2 535 | ], 536 | [ 537 | "H6", 538 | "H7", 539 | 3 540 | ], 541 | [ 542 | "H7", 543 | "H8", 544 | 1 545 | ], 546 | [ 547 | "H8", 548 | "H9", 549 | 2 550 | ], 551 | [ 552 | "H9", 553 | "H10", 554 | 2 555 | ], 556 | [ 557 | "H10", 558 | "H11", 559 | 2 560 | ], 561 | [ 562 | "H11", 563 | "H12", 564 | 1 565 | ], 566 | [ 567 | "H12", 568 | "H13", 569 | 3 570 | ], 571 | [ 572 | "H13", 573 | "H14", 574 | 1 575 | ], 576 | [ 577 | "H14", 578 | "H15", 579 | 2 580 | ], 581 | [ 582 | "H15", 583 | "H16", 584 | 2 585 | ], 586 | [ 587 | "H16", 588 | "H17", 589 | 1 590 | ], 591 | [ 592 | "H17", 593 | "H18", 594 | 2 595 | ], 596 | [ 597 | "H18", 598 | "H19", 599 | 2 600 | ], 601 | [ 602 | "H19", 603 | "H20", 604 | 2 605 | ], 606 | [ 607 | "H20", 608 | "H21", 609 | 3 610 | ] 611 | ] 612 | }, 613 | "M": { 614 | "color": "#ff0000", 615 | "transfers": [ 616 | [ 617 | "M9", 618 | "F13" 619 | ], 620 | [ 621 | "M12", 622 | "N8" 623 | ], 624 | [ 625 | "M13", 626 | "G5" 627 | ], 628 | [ 629 | "M13", 630 | "Y16" 631 | ], 632 | [ 633 | "M13", 634 | "Z4" 635 | ], 636 | [ 637 | "M13", 638 | "N7" 639 | ], 640 | [ 641 | "M14", 642 | "C7" 643 | ], 644 | [ 645 | "M14", 646 | "G6" 647 | ], 648 | [ 649 | "M14", 650 | "N6" 651 | ], 652 | [ 653 | "M15", 654 | "H6" 655 | ], 656 | [ 657 | "M15", 658 | "C8" 659 | ], 660 | [ 661 | "M16", 662 | "G9" 663 | ], 664 | [ 665 | "M16", 666 | "H8" 667 | ], 668 | [ 669 | "M18", 670 | "T9" 671 | ], 672 | [ 673 | "M18", 674 | "C11" 675 | ], 676 | [ 677 | "M18", 678 | "Z8" 679 | ], 680 | [ 681 | "M19", 682 | "C12" 683 | ], 684 | [ 685 | "M22", 686 | "N11" 687 | ], 688 | [ 689 | "M25", 690 | "Y9" 691 | ], 692 | [ 693 | "M25", 694 | "F9" 695 | ] 696 | ], 697 | "travel_times": [ 698 | [ 699 | "M1", 700 | "M2", 701 | 2 702 | ], 703 | [ 704 | "M2", 705 | "M3", 706 | 2 707 | ], 708 | [ 709 | "M3", 710 | "M4", 711 | 2 712 | ], 713 | [ 714 | "M4", 715 | "M5", 716 | 2 717 | ], 718 | [ 719 | "M5", 720 | "M6", 721 | 2 722 | ], 723 | [ 724 | "M6", 725 | "M7", 726 | 2 727 | ], 728 | [ 729 | "M7", 730 | "M8", 731 | 2 732 | ], 733 | [ 734 | "M8", 735 | "M9", 736 | 2 737 | ], 738 | [ 739 | "M9", 740 | "M10", 741 | 1 742 | ], 743 | [ 744 | "M10", 745 | "M11", 746 | 2 747 | ], 748 | [ 749 | "M11", 750 | "M12", 751 | 2 752 | ], 753 | [ 754 | "M12", 755 | "M13", 756 | 3 757 | ], 758 | [ 759 | "M13", 760 | "M14", 761 | 2 762 | ], 763 | [ 764 | "M14", 765 | "M15", 766 | 1 767 | ], 768 | [ 769 | "M15", 770 | "M16", 771 | 3 772 | ], 773 | [ 774 | "M16", 775 | "M17", 776 | 2 777 | ], 778 | [ 779 | "M17", 780 | "M18", 781 | 2 782 | ], 783 | [ 784 | "M18", 785 | "M19", 786 | 2 787 | ], 788 | [ 789 | "M19", 790 | "M20", 791 | 1 792 | ], 793 | [ 794 | "M20", 795 | "M21", 796 | 2 797 | ], 798 | [ 799 | "M21", 800 | "M22", 801 | 2 802 | ], 803 | [ 804 | "M22", 805 | "M23", 806 | 3 807 | ], 808 | [ 809 | "M23", 810 | "M24", 811 | 2 812 | ], 813 | [ 814 | "M24", 815 | "M25", 816 | 3 817 | ], 818 | [ 819 | "m3", 820 | "m4", 821 | 2 822 | ], 823 | [ 824 | "m4", 825 | "m5", 826 | 2 827 | ], 828 | [ 829 | "m5", 830 | "M6", 831 | 2 832 | ] 833 | ] 834 | }, 835 | "N": { 836 | "color": "#1aaca9", 837 | "transfers": [ 838 | [ 839 | "N1", 840 | "T1" 841 | ], 842 | [ 843 | "N2", 844 | "T2" 845 | ], 846 | [ 847 | "N3", 848 | "T3" 849 | ], 850 | [ 851 | "N6", 852 | "G6" 853 | ], 854 | [ 855 | "N6", 856 | "M14" 857 | ], 858 | [ 859 | "N6", 860 | "C7" 861 | ], 862 | [ 863 | "N7", 864 | "Y16" 865 | ], 866 | [ 867 | "N7", 868 | "Z4" 869 | ], 870 | [ 871 | "N7", 872 | "G5" 873 | ], 874 | [ 875 | "N7", 876 | "M13" 877 | ], 878 | [ 879 | "N8", 880 | "M12" 881 | ], 882 | [ 883 | "N9", 884 | "Y14" 885 | ], 886 | [ 887 | "N10", 888 | "Y13" 889 | ], 890 | [ 891 | "N10", 892 | "T6" 893 | ], 894 | [ 895 | "N11", 896 | "M22" 897 | ] 898 | ], 899 | "travel_times": [ 900 | [ 901 | "N1", 902 | "N2", 903 | 2 904 | ], 905 | [ 906 | "N2", 907 | "N3", 908 | 2 909 | ], 910 | [ 911 | "N3", 912 | "N4", 913 | 2 914 | ], 915 | [ 916 | "N4", 917 | "N5", 918 | 2 919 | ], 920 | [ 921 | "N5", 922 | "N6", 923 | 2 924 | ], 925 | [ 926 | "N6", 927 | "N7", 928 | 2 929 | ], 930 | [ 931 | "N7", 932 | "N8", 933 | 2 934 | ], 935 | [ 936 | "N8", 937 | "N9", 938 | 2 939 | ], 940 | [ 941 | "N9", 942 | "N10", 943 | 2 944 | ], 945 | [ 946 | "N10", 947 | "N11", 948 | 2 949 | ], 950 | [ 951 | "N11", 952 | "N12", 953 | 3 954 | ], 955 | [ 956 | "N12", 957 | "N13", 958 | 2 959 | ], 960 | [ 961 | "N13", 962 | "N14", 963 | 2 964 | ], 965 | [ 966 | "N14", 967 | "N15", 968 | 3 969 | ], 970 | [ 971 | "N15", 972 | "N16", 973 | 1 974 | ], 975 | [ 976 | "N16", 977 | "N17", 978 | 3 979 | ], 980 | [ 981 | "N17", 982 | "N18", 983 | 2 984 | ], 985 | [ 986 | "N18", 987 | "N19", 988 | 2 989 | ] 990 | ] 991 | }, 992 | "T": { 993 | "color": "#1aa7d8", 994 | "transfers": [ 995 | [ 996 | "T6", 997 | "N10" 998 | ], 999 | [ 1000 | "T6", 1001 | "Y13" 1002 | ], 1003 | [ 1004 | "T7", 1005 | "Z6" 1006 | ], 1007 | [ 1008 | "T9", 1009 | "M18" 1010 | ], 1011 | [ 1012 | "T9", 1013 | "C11" 1014 | ], 1015 | [ 1016 | "T9", 1017 | "Z8" 1018 | ], 1019 | [ 1020 | "T10", 1021 | "G11" 1022 | ], 1023 | [ 1024 | "T11", 1025 | "H12" 1026 | ] 1027 | ], 1028 | "travel_times": [ 1029 | [ 1030 | "T1", 1031 | "T2", 1032 | 0 1033 | ], 1034 | [ 1035 | "T2", 1036 | "T3", 1037 | 3 1038 | ], 1039 | [ 1040 | "T3", 1041 | "T4", 1042 | 6 1043 | ], 1044 | [ 1045 | "T4", 1046 | "T5", 1047 | 9 1048 | ], 1049 | [ 1050 | "T5", 1051 | "T6", 1052 | 11 1053 | ], 1054 | [ 1055 | "T6", 1056 | "T7", 1057 | 13 1058 | ], 1059 | [ 1060 | "T7", 1061 | "T8", 1062 | 14 1063 | ], 1064 | [ 1065 | "T8", 1066 | "T9", 1067 | 16 1068 | ], 1069 | [ 1070 | "T9", 1071 | "T10", 1072 | 18 1073 | ], 1074 | [ 1075 | "T10", 1076 | "T11", 1077 | 20 1078 | ], 1079 | [ 1080 | "T11", 1081 | "T12", 1082 | 21 1083 | ], 1084 | [ 1085 | "T12", 1086 | "T13", 1087 | 24 1088 | ], 1089 | [ 1090 | "T13", 1091 | "T14", 1092 | 26 1093 | ], 1094 | [ 1095 | "T14", 1096 | "T15", 1097 | 27 1098 | ], 1099 | [ 1100 | "T15", 1101 | "T16", 1102 | 30 1103 | ], 1104 | [ 1105 | "T16", 1106 | "T17", 1107 | 33 1108 | ], 1109 | [ 1110 | "T17", 1111 | "T18", 1112 | 35 1113 | ], 1114 | [ 1115 | "T18", 1116 | "T19", 1117 | 37 1118 | ], 1119 | [ 1120 | "T19", 1121 | "T20", 1122 | 39 1123 | ], 1124 | [ 1125 | "T20", 1126 | "T21", 1127 | 41 1128 | ], 1129 | [ 1130 | "T21", 1131 | "T22", 1132 | 43 1133 | ], 1134 | [ 1135 | "T22", 1136 | "T23", 1137 | 46 1138 | ], 1139 | [ 1140 | "T23", 1141 | "T24", 1142 | 49 1143 | ] 1144 | ] 1145 | }, 1146 | "Y": { 1147 | "color": "#ede7c3", 1148 | "transfers": [ 1149 | [ 1150 | "Y1", 1151 | "F1" 1152 | ], 1153 | [ 1154 | "Y2", 1155 | "F2" 1156 | ], 1157 | [ 1158 | "Y3", 1159 | "F3" 1160 | ], 1161 | [ 1162 | "Y4", 1163 | "F4" 1164 | ], 1165 | [ 1166 | "Y5", 1167 | "F5" 1168 | ], 1169 | [ 1170 | "Y6", 1171 | "F6" 1172 | ], 1173 | [ 1174 | "Y7", 1175 | "F7" 1176 | ], 1177 | [ 1178 | "Y8", 1179 | "F8" 1180 | ], 1181 | [ 1182 | "Y9", 1183 | "F9" 1184 | ], 1185 | [ 1186 | "Y9", 1187 | "M25" 1188 | ], 1189 | [ 1190 | "Y13", 1191 | "T6" 1192 | ], 1193 | [ 1194 | "Y13", 1195 | "N10" 1196 | ], 1197 | [ 1198 | "Y14", 1199 | "N9" 1200 | ], 1201 | [ 1202 | "Y16", 1203 | "Z4" 1204 | ], 1205 | [ 1206 | "Y16", 1207 | "N7" 1208 | ], 1209 | [ 1210 | "Y16", 1211 | "G5" 1212 | ], 1213 | [ 1214 | "Y16", 1215 | "M13" 1216 | ], 1217 | [ 1218 | "Y18", 1219 | "H7" 1220 | ], 1221 | [ 1222 | "Y18", 1223 | "C9" 1224 | ] 1225 | ], 1226 | "travel_times": [ 1227 | [ 1228 | "Y1", 1229 | "Y2", 1230 | 4 1231 | ], 1232 | [ 1233 | "Y2", 1234 | "Y3", 1235 | 2 1236 | ], 1237 | [ 1238 | "Y3", 1239 | "Y4", 1240 | 3 1241 | ], 1242 | [ 1243 | "Y4", 1244 | "Y5", 1245 | 2 1246 | ], 1247 | [ 1248 | "Y5", 1249 | "Y6", 1250 | 2 1251 | ], 1252 | [ 1253 | "Y6", 1254 | "Y7", 1255 | 2 1256 | ], 1257 | [ 1258 | "Y7", 1259 | "Y8", 1260 | 2 1261 | ], 1262 | [ 1263 | "Y8", 1264 | "Y9", 1265 | 3 1266 | ], 1267 | [ 1268 | "Y9", 1269 | "Y10", 1270 | 2 1271 | ], 1272 | [ 1273 | "Y10", 1274 | "Y11", 1275 | 2 1276 | ], 1277 | [ 1278 | "Y11", 1279 | "Y12", 1280 | 2 1281 | ], 1282 | [ 1283 | "Y12", 1284 | "Y13", 1285 | 3 1286 | ], 1287 | [ 1288 | "Y13", 1289 | "Y14", 1290 | 2 1291 | ], 1292 | [ 1293 | "Y14", 1294 | "Y15", 1295 | 2 1296 | ], 1297 | [ 1298 | "Y15", 1299 | "Y16", 1300 | 1 1301 | ], 1302 | [ 1303 | "Y16", 1304 | "Y17", 1305 | 2 1306 | ], 1307 | [ 1308 | "Y17", 1309 | "Y18", 1310 | 2 1311 | ], 1312 | [ 1313 | "Y18", 1314 | "Y19", 1315 | 2 1316 | ], 1317 | [ 1318 | "Y19", 1319 | "Y20", 1320 | 2 1321 | ], 1322 | [ 1323 | "Y20", 1324 | "Y21", 1325 | 2 1326 | ], 1327 | [ 1328 | "Y21", 1329 | "Y22", 1330 | 2 1331 | ], 1332 | [ 1333 | "Y22", 1334 | "Y23", 1335 | 3 1336 | ], 1337 | [ 1338 | "Y23", 1339 | "Y24", 1340 | 2 1341 | ] 1342 | ] 1343 | }, 1344 | "Z": { 1345 | "color": "#a384bf", 1346 | "transfers": [ 1347 | [ 1348 | "Z1", 1349 | "F16" 1350 | ], 1351 | [ 1352 | "Z1", 1353 | "G1" 1354 | ], 1355 | [ 1356 | "Z2", 1357 | "C4" 1358 | ], 1359 | [ 1360 | "Z2", 1361 | "G2" 1362 | ], 1363 | [ 1364 | "Z3", 1365 | "G4" 1366 | ], 1367 | [ 1368 | "Z4", 1369 | "Y16" 1370 | ], 1371 | [ 1372 | "Z4", 1373 | "N7" 1374 | ], 1375 | [ 1376 | "Z4", 1377 | "M13" 1378 | ], 1379 | [ 1380 | "Z4", 1381 | "G5" 1382 | ], 1383 | [ 1384 | "Z6", 1385 | "T7" 1386 | ], 1387 | [ 1388 | "Z8", 1389 | "M18" 1390 | ], 1391 | [ 1392 | "Z8", 1393 | "C11" 1394 | ], 1395 | [ 1396 | "Z8", 1397 | "T9" 1398 | ], 1399 | [ 1400 | "Z9", 1401 | "G12" 1402 | ] 1403 | ], 1404 | "travel_times": [ 1405 | [ 1406 | "Z1", 1407 | "Z2", 1408 | 3 1409 | ], 1410 | [ 1411 | "Z2", 1412 | "Z3", 1413 | 2 1414 | ], 1415 | [ 1416 | "Z3", 1417 | "Z4", 1418 | 2 1419 | ], 1420 | [ 1421 | "Z4", 1422 | "Z5", 1423 | 2 1424 | ], 1425 | [ 1426 | "Z5", 1427 | "Z6", 1428 | 2 1429 | ], 1430 | [ 1431 | "Z6", 1432 | "Z7", 1433 | 2 1434 | ], 1435 | [ 1436 | "Z7", 1437 | "Z8", 1438 | 2 1439 | ], 1440 | [ 1441 | "Z8", 1442 | "Z9", 1443 | 2 1444 | ], 1445 | [ 1446 | "Z9", 1447 | "Z10", 1448 | 3 1449 | ], 1450 | [ 1451 | "Z10", 1452 | "Z11", 1453 | 3 1454 | ], 1455 | [ 1456 | "Z11", 1457 | "Z12", 1458 | 3 1459 | ], 1460 | [ 1461 | "Z12", 1462 | "Z13", 1463 | 2 1464 | ], 1465 | [ 1466 | "Z13", 1467 | "Z14", 1468 | 2 1469 | ] 1470 | ] 1471 | } 1472 | } -------------------------------------------------------------------------------- /ch04-figures.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Chapter 4: Figures" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Robert Johansson\n", 15 | "\n", 16 | "Source code listings for [Numerical Python - Scientific Computing and Data Science Applications with Numpy, SciPy and Matplotlib](https://link.springer.com/book/10.1007/979-8-8688-0413-7) (ISBN 979-8-8688-0412-0)." 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 1, 22 | "metadata": { 23 | "collapsed": false, 24 | "jupyter": { 25 | "outputs_hidden": false 26 | } 27 | }, 28 | "outputs": [], 29 | "source": [ 30 | "%matplotlib inline\n", 31 | "import matplotlib.pyplot as plt\n", 32 | "import matplotlib as mpl" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 2, 38 | "metadata": { 39 | "collapsed": false, 40 | "jupyter": { 41 | "outputs_hidden": false 42 | } 43 | }, 44 | "outputs": [ 45 | { 46 | "data": { 47 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmgAAAHJCAYAAAAxR8WfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAllUlEQVR4nO3dfZRXdYHH8c8AMpAwA8iTKEW6HsmHFCHT0jBtwUTMdSnXNtLcrHZ9wsQ92TlFW2ueSm3TTnkqMbWMWh+q3cxUjqaYZqKTEpZQjBiPKjAgDA/i3T9cJwcYmOHxi75e5/yO87v3e+/9/kbOmfe5v3t/v5qqqqoAAFCMTrt6AgAAtCbQAAAKI9AAAAoj0AAACiPQAAAKI9AAAAoj0AAACiPQAAAKI9AAAAqzVYH2wgsvpH///mlsbNzO0/mbxYsXp1+/fpk3b94OOwYA8MZUestsVaBdfvnlGTt2bIYMGZIkmTt3bsaOHZs999wzffv2zQUXXJC1a9dudh/f+c53ctxxx6Wuri41NTVZtmxZq/X9+/fP+PHjM2nSpK2ZIgBAmzZsmQsvvDDDhw9PbW1tDj/88HbtY0e2TIcDrbm5Odddd10+/vGPJ0nWr1+fMWPGZOXKlZk2bVqmTJmSW2+9NRdffPFm97Nq1aqceOKJ+exnP9vmmI997GP54Q9/mKVLl3Z0mgAAm7RhyyRJVVU5++yzc/rpp7d7PzuyZbp0aHSSX/7yl+nSpUuOPvroJMldd92VmTNn5tlnn82gQYOSJFdeeWXOOuusXHbZZamrq9vkfiZMmJAkue+++9o81qGHHpqBAwfm9ttvz9lnn93RqQIAbGTDlkmSq6++Okny3HPP5YknnmjXfnZky3T4DNr999+fESNGtDx/6KGHcsghh7TEWZKMHj06a9asyfTp0zu6+40ceeSReeCBB7Z5PwAAycYts6NtTct0ONAaGxtbxdjChQszYMCAVmN69+6drl27ZuHChR3d/Ub22WefHXoBHwDwxrJhy+xoW9MyW3UNWrdu3Votq6mp2WhcVVWbXN5R3bt3z6pVq7Z5PwAAyaZbZkfampbpcKD17du31YVuAwcO3OhM2dKlS7Nu3bqNzqxtjSVLlqRfv37bvB8AgGTjltnRtqZlOhxow4YNy8yZM1ueH3300ZkxY0YWLFjQsuyuu+5KbW1thg8f3tHdb2TGjBkZNmzYNu8HACDZuGV2tK1pmQ4H2ujRo/OHP/yhpTxHjRqVgw46KOPHj8/jjz+eqVOnZuLEiTnnnHPavIMzeeXatYaGhsyePTtJ8uSTT6ahoSFLlixpGbNq1apMnz49o0aN6ug0AQA2acOWSZLZs2enoaEhCxcuTHNzcxoaGtLQ0LDZz3XdoS1TbYWjjjqquvbaa1ueP/PMM9WYMWOq7t27V3369KnOO++8avXq1a22SVJdf/31Lc8nTZpUJdno8doxN998c3XggQduzRQBANq0YcuMHDlyk10yZ86cljE7s2Vq/v+AHXLHHXdk4sSJmTFjRjp12vJJuMbGxhxwwAGZOXNmDjjggHYf58gjj8yECRPy4Q9/uKNTBABoU+kt0+EPqk2Sk046KbNmzcq8efMyePDgLY6/884784lPfKJDL2jx4sUZN25czjjjjK2ZIgBAm0pvma06gwYAwI7TrjNoL7/8cubPn5+ePXtul882AwDYmaqqyooVKzJo0KB2vaW5q7Ur0ObPn9+u038AACV79tlns+++++7qaWxRuwKtZ8+eSV55UZv76AwAgBItX748gwcPbmma0rUr0F59W7Ourk6gAQC7rd3lUq3y34QFAHiDEWgAAIURaAAAhRFoAACFEWgAAIURaAAAhRFoAACFEWgAAIURaAAAhRFoAACFEWgAAIURaAAAhSku0GpqalJTU5P77rtvV08FAGCX2OGB9oUvfKElurb0AAAg6bIzDzZgwIAtjjnwwAOTJG9605t29HQAAIq0UwNt4cKFWxzzxz/+cSfMBACgXMVdgwYA8EZXXKBt6SaB559/PhdddFH222+/dOvWLXvvvXc++MEP5rHHHtvs9t///vdTU1OTIUOGtHnsxsbGlu0bGxs3u/29996bU089NXvvvXc6d+6cs846q9X41atX5+qrr87IkSPTt2/fdO3aNQMHDsypp56aO++8swO/EQDgjWanvsW5rZ5++um8973vzfz585MktbW1WbVqVW655Zb8/Oc/zy233LJT5nH11VdnwoQJqaoq9fX16dy5c6v1s2bNypgxYzJr1qwkr0RjXV1dFi1alJ/97Gf52c9+ln/913/Nt771rZ0yXwBg91LcGbS2rFu3LuPGjcv8+fPTt2/f3HbbbVm5cmWampry1FNP5ZhjjsmZZ565w+exaNGifPrTn86ZZ56ZuXPnZtmyZWlubs7nPve5JMmyZcsyatSozJo1K8cff3zuv//+NDc3Z9myZVm2bFmuuuqq9OjRI9/+9rfzjW98Y4fPFwDY/ezUM2gDBw5sc93UqVNz8MEHt7n+xz/+cZ588snU1NTktttuy7HHHtuybujQofnFL36RYcOGZenSpdt1zhtavXp1TjvttFx//fUtyzp37pz9998/SXLZZZelsbExxx9/fH71q1+lS5e//Yrr6+tz0UUXZciQITnttNPyn//5nzn33HNbjQEA2Kln0BYtWtTmY926dZvd9r//+7+TJO95z3taxdmrunXrlksuuWSHzHtDl1566SaXV1WVyZMnJ0kuvvjiNsPr1FNPTV1dXZ5//vlMnz59h80TANg97dRTN1VVbfW2r94EMHLkyDbHHHfccVu9//bq3r17jjjiiE2umzlzZpYsWZIkOeuss9KpU9v9++KLLyZJnnnmmbzzne/c/hMFAHZbu817a88991ySZNCgQW2O2WeffXb4PPbaa682w+vVmxeSv813S1atWrVd5gUAvH7sNoH2ql39lVAb3rH5WuvXr2/5eeHChe365gQAgA3tNndx9uvXL0nrs1QbmjdvXpvrXr0ebPXq1W2OaWpq2srZveK1N0E8+eST27QvAOCNa7cJtFev+2rrA2y3tK53795JksWLF2fNmjWbHPPb3/52q+eXJIccckjq6uqSJFOmTNmmfQEAb1y7TaCNGzcuSXL//ffnwQcf3Gj9mjVrcsUVV7S5/WGHHZbklRsVbr/99o3WNzc35+tf//o2zbFLly45++yzkyQ33HBDpk2bttnxr95QAADwWrtNoJ1++uk5+OCDU1VVTjvttPzsZz9ruebrT3/6U04++eTNfhn7vvvum2OOOSZJ8ulPfzr33HNPy/bTp0/P+973vixevHib5/m5z30u+++/f1566aWceOKJueqqq1rdMNDU1JQ777wzZ5555iY/LgQAYLcJtK5du+aWW27JwIEDs3jx4px66qnZc88906tXrwwdOjQPPPBAbrzxxpbx3bp122gf11xzTXr27JkFCxbk7//+79OjR4/06NEjI0aMyJ///OfcdNNN2zzPPn365O67785hhx2WlStX5uKLL07//v3Tu3fv1NfXp1evXnn/+9+fG2+8MWvXrt3m4wEArz+7TaAlr3xjwBNPPJELLrggQ4YMSVVV6datWz70oQ/l4Ycfzrvf/e6Wsb169dpo+8MPPzyPPPJI/umf/in9+/fPyy+/nL59++bcc89NQ0NDDjrooO0yz7e+9a159NFHc+ONN+bkk0/O3nvvnZUrV2bt2rV561vfmn/4h3/I5MmT89BDD22X4wEAry81VTs+PXb58uWpr69PU1NTy0XwJbr77rszatSo1NbWZsWKFdljjz129ZQAgALsLi3zqt3qDNrmVFWVr3zlK0mSE044QZwBALut3SrQ7r333kyYMCGPPvpompubk7wSZtOnT8/YsWMzderU1NTU5N///d938UwBALbebvVNAk1NTfnGN76Rb3zjG0le+Wyz5ubmlg+frampyRVXXLHZ7+sEACjdbhVoRx11VL70pS9l6tSp+ctf/tLy8RX77bdfjj322Jx33nkZMWLELp4lAMC2eV3dJAAAsCm7W8vsVtegAQC8EQg0AIDCCDQAgMIINACAwgg0AIDCCDQAgMIINACAwgg0AIDCCDQAgMIINACAwgg0AIDCCDQAgMIINACAwgg0AIDCCDQAgMIINACAwnTZ1RPYHbz88suZP39+evbsmZqaml09HQDosKqqsmLFigwaNCidOjk/UzqB1g7z58/P4MGDd/U0AGCbPfvss9l333139TTYAoHWDj179kzyyj/qurq6XTwbAOi45cuXZ/DgwS1/0yibQGuHV9/WrKurE2gA7NZcqrN78CY0AEBhBBoAQGEEGgBAYQQaAEBhBBoAQGEEGgBAYQQaAEBhBBoAQGEEGgBAYQQaAEBhBBoAQGEEGgBAYQQaAEBhBBoAQGEEGgBAYQQaAEBhBBoAQGEEGgBAYQTaLrB06dJ069YtNTU1qampyaxZs3b1lACAggi0XeCHP/xh1qxZ0/J88uTJu3A2AEBpBNoucN111yVJzj///CTJDTfckPXr1+/KKQEABRFoO9ljjz2WhoaG9OrVK1/96lez3377ZcGCBfnlL3+5q6cGABRCoO1kr549O/3009OtW7eMHz++1fIN/fjHP265Vu3222/f5JiGhoaWa9q+/OUvb7S+qakpl112Wd75znemd+/eqa2tzeDBg3PGGWfk4YcfbnOuS5cuzec///kcccQRqaurS9euXTNw4MC8/e1vz6c+9alMnTq1oy8fAGiPqh2ampqqJFVTU1N7hr/ubK/X39zcXPXq1atKUj344INVVVXVn//856qmpqbq0qVLtXDhwk1ud/bZZ1dJqj59+lRz585tte7FF1+sDjzwwCpJddxxx1Xr169vtf7hhx+uBgwYUCWpklSdO3euevbs2fK8pqam+vKXv7zRMZ999tnqzW9+c8u4Tp06Vb179646d+7csmzkyJHb9PsAYOfxt3z3ev3OoO1Et956a5YtW5a/+7u/y7ve9a4kyX777ZdjjjkmL730Um666aZNbnfNNddk6NChWbJkST7ykY+0ul7t/PPPz5/+9Kfstdde+cEPfpBOnf72v7SxsTEnnnhiFi1alHHjxmX69OlZvXp1li9fnkWLFuVzn/tcOnfunM9+9rP56U9/2uqYX/jCFzJ37twMGTIk99xzT9auXZslS5ZkzZo1aWxszLe//e0cddRR2/+XBAA4g9Ye2+v1v/e9762SVF/84hdbLf/ud79bJamGDh3a5rYNDQ1VbW1tlaT6whe+UFVVVU2ZMqXlbNZPf/rTjbYZN25claQaP358m/u96qqrqiTVYYcd1mr52972tipJdfPNN3fgFQJQKn/Ld6/X7wzaTvKXv/wl9913X2pqalquO3vVhz70oXTv3j1//OMf85vf/GaT2x922GH52te+liT50pe+lJtuuimf/OQnkyTnnntuPvCBD7Qav2TJktx2221Jks985jNtzuujH/1okuT3v/99Fi1a1LK8V69eSZIFCxZ04FUCANuDQNtJJk+enKqqcuyxx2bIkCGt1tXV1eXUU09tGdeW888/P2PHjs369evz0Y9+NE1NTTn00ENzxRVXbDT2oYceyssvv5wkOf744zNw4MBNPg4++OCWbZ555pmWn08++eQkr8TdJz7xidx5551Zvnz51r58AKADBNpO8PLLL+eGG25I8rczVhs688wzk7xy1+aLL77Y5r4mT56cbt26JUk6d+6cH/3oRy3PX2v+/PktPy9atGizj1etWrWq5edLLrkkH/rQh7Ju3bp897vfzfvf//706tUrhx56aC655JI8/fTTHfgNAAAdIdB2gl/96lf561//miT5+Mc/3vKxGa99nHjiiUmSF198MT/5yU/a3NeNN96Y1atXJ0nWr1+fadOmbXLcqzcSdO/ePVVVtetx3HHHtWy/xx575Mc//nEaGhry+c9/Pscff3ze9KY3ZcaMGbniiity0EEH5corr9wevx4AYAMCbSdo6zPO2tLW25yPPfZYLr300iTJ29/+9iTJRRddlJkzZ240duDAgUmS5ubmzJ49u0PHf63DDjss//Ef/5GpU6dm2bJlueeee/Ke97wn69evzyWXXJLf//73W71vAGDTBNoO9txzz+XnP/95kuSWW27JihUr2nw88sgjSZIHH3wwf/zjH1vtZ+XKlTnjjDOydu3aHH/88XnkkUdy5JFHprm5OWeccUar7/ZMkne9612pqalJkkyZMmW7vJYuXbrkhBNOyC9+8YvU1tamqqrcc88922XfAMDfCLQd7Kabbsq6detSX1+fsWPHpkePHm0+3vGOd2To0KFJNj6Ldt555+Xpp5/OXnvtlZtuuim1tbW5+eab07NnzzzxxBOZOHFiq/H9+/dvubPza1/72havGVuyZEmr5xsG32vV1tamc+fOSdLyXwBg+xFoO9irofWBD3wgXbt23eL4D37wg0leudbspZdeSvLKGbDvf//7LfsbNGhQkmT//ffPt771rSTJN7/5zfzv//5vq31deeWV2WuvvbJ8+fIcc8wxmTx5cpqamlrWP//887ntttty2mmn5Ywzzmi17Vve8pZceumlefjhh1vF2uzZs/PP//zPWbVqVTp16pTRo0d35NcBALRHez4sbXf7cLftbWtf/0MPPdTyQbL/8z//065tnnjiiVYfPjtnzpyqvr6+SlKde+65m9xm/PjxVZKqb9++1bx581qte+yxx6ohQ4a0+mqn3r17Vz169GhZlqR63/ve12q716579WueunXr1mo/X//61zv0+wBg1/G3fPd6/TVVVVVbirjly5envr4+TU1Nqaur296NWLytff3nnHNOvve976W+vj6LFy9u1xm0JDnooIPy1FNP5f3vf3+WLl2ahx9+OIccckh+97vfbfIjNVasWJEjjjgis2fPzgknnJC77rqr1Vc+NTc3Z/LkyfnpT3+a3//+91m6dGm6du2affbZJ+94xztyyimn5KSTTkrPnj1btrn77rtz7733Ztq0aZk7d27Lx3Hsu+++OfbYY3Puuedm+PDh7f5dALBr+Vu+e71+gdYOb/TXD8Du743+t2x3e/2uQQMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADACiMQAMAKIxAAwAojEADAChMl109gd1BVVVJkuXLl+/imQDA1nn1b9irf9Mom0BrhxUrViRJBg8evItnAgDbZsWKFamvr9/V02ALBFo7DBo0KM8++2x69uyZmpqaXT0dAOiwqqqyYsWKDBo0aFdPhXYQaO3QqVOn7Lvvvrt6GgCwTZw52324SQAAoDACDQCgMAINAKAwAg0AoDACDQCgMAINAKAwAg0AoDACDQCgMAINAKAwAm0bvfDCC+nfv38aGxt39VSK981vfjOnnHLKrp4GABRPoG2jyy+/PGPHjs2QIUNals2dOzdjx47Nnnvumb59++aCCy7I2rVrN7uf73znOznuuONSV1eXmpqaLFu2bKMxQ4YMSU1NTavHZz7zmQ7P+de//nWGDx+ebt26Zb/99su11167xW0uvPDCDB8+PLW1tTn88MM3Wt/Y2LjR3GpqanLnnXe2jDnnnHPyu9/9LtOmTevwnAHgjcR3cW6D5ubmXHfddbnjjjtalq1fvz5jxoxJv379Mm3atLzwwgs588wzU1VVrrnmmjb3tWrVqpx44ok58cQTc+mll7Y57otf/GLOOeecluc9evTo0JznzJmTk046Keecc05+8IMf5MEHH8y//du/pV+/fvnHf/zHNrerqipnn312fvvb3+aJJ55oc9w999yTgw8+uOV5nz59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", 48 | "text/plain": [ 49 | "
" 50 | ] 51 | }, 52 | "metadata": {}, 53 | "output_type": "display_data" 54 | } 55 | ], 56 | "source": [ 57 | "fig = plt.figure()\n", 58 | "\n", 59 | "ax = fig.add_axes([0.05, 0.05, .88, .88])\n", 60 | "ax.set_yticks([])\n", 61 | "ax.set_xticks([])\n", 62 | "ax.text(0.001, 0.01, \"(0,0)\")\n", 63 | "ax.text(1.001, 0.01, \"(1,0)\")\n", 64 | "ax.text(0.001, 1.01, \"(0,1)\")\n", 65 | "ax.text(1.001, 1.01, \"(1,1)\")\n", 66 | "ax.text(0.02, 0.92, \"Figure\", fontsize=18)\n", 67 | "\n", 68 | "ax.text(0.12, 0.06, \"(0.15, 0.15)\")\n", 69 | "\n", 70 | "ax = fig.add_axes([0.15, 0.15, 0.68, 0.66])\n", 71 | "ax.text(0.03, 0.88, \"Axes\", fontsize=18)\n", 72 | "ax.set_yticks([])\n", 73 | "ax.set_xticks([])\n", 74 | "\n", 75 | "\n", 76 | "fig.savefig(\"figure-axes-schematic.pdf\");" 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": 3, 82 | "metadata": { 83 | "collapsed": false, 84 | "jupyter": { 85 | "outputs_hidden": false 86 | } 87 | }, 88 | "outputs": [ 89 | { 90 | "data": { 91 | "image/png": "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RESEatWqpcTERN1///0aNmxYkYEvSefOnVOnTp00ffp0VapUSREREapcufJF91evXj116NChoF3btm3VoUOHgo/D4bhkzadPn1aXLl300EMPKSEhQYGBgbrhhhuUkZGhjz76SI899liJjv2tt97SfffdVxD0PXv2LNF2AFDmTAXgdDqNJON0Or1dikeEhoYaSWbjxo3m+++/N5JMz549C7UZMWKEkWRWr15tjhw5YiSZov7cq1evNlu3bjV5eXmFlm/YsMFcffXVxtfX1yQlJRVad/DgQSPJhIaGFlqel5dn2rZtaySZzp07m5SUlIJ1a9asMQEBAUaSmTNnTqHt5s2bZyQZX19f07x5c7N3796CdefOnXPpd3Lw4MEi1xdXszHG9OvXz0gyYWFhZuvWrYXW/fjjj2bGjBmFlnXu3NlIMl999VXBspkzZxpJpk6dOmbnzp0lqhkAXFGaLCPsy6E/h70xxrRq1cr4+vqao0ePGmOMOX/+vAkKCjJ169Y12dnZFw37i3n77beNJPPCCy8UWl5ccK5du9ZIMpUrVzbHjh27oL8ZM2YUbPfnLxf5YS/JfPPNNy7VmM/dsN+2bVtBzQcOHCjRvv4z7J977jkjyTRs2NDs27fPrfoB4FJKk2WcxreBmJgY5ebmaunSpZKkVatWKTU1VYMGDVKlSpe+4eLkyZOaPXu2Bg8erO7du+uWW27RLbfcolmzZkmSdu/eXaI68q9R33PPPapfv/4F60eOHKnKlSvr559/LvLugOuuu06tW7cu0b48Jf96fP/+/dWsWTOXtjXG6PHHH9eUKVMUFhamjRs3qkWLFmVRJgCUCrfe2cCgQYP05JNPauHChRo3blzBLPz82foXEx8fr3vvvVdOp7PYNr///nuJ6jhw4IAkKSIiosj1gYGBCg4OVlJSkg4cOHBBMF577bUl2o8n7du3T5J00003ubztE088oZ07d+q6667T2rVrdfXVV3u6PADwCEb2NlC/fn11795du3bt0oYNG7RmzRq1aNFCbdu2veh2qampGjhwoJxOp4YMGaKtW7fq9OnTys3NlTFGa9eulSRlZ2eXqI4zZ85IkurWrVtsm3r16kmS0tPTL1gXEBBQov14UlpamiQpKCjI5W2TkpIk/fFEw6uuusqTZQGARxH2NpF/L31MTIyysrJKdG/9mjVrdPr0aUVFRWn+/Plq3769goKC5OPzx/8sjhw54lIN1atXlySdOHGi2DbHjx+XpIveIXA55dfhzmN233rrLbVo0UKfffaZBg0apJycHA9XBwCeQdjbRP/+/VW9enUdPny44Ja8Szl06JAkKSoqqsjn5pf0Wn2+5s2bS5L27t1b5Pr09PSCLxD5bT3F3ef+X3fddZKkrVu3urxt3bp1tX79ejVt2lTLly/XkCFDlJeX51YdAFCWCHubqFatmsaPH69u3brp4YcfVmho6CW3qVq1qqT/G23/2alTp/TOO++4VEP+I3s/+OADpaSkXLD+jTfeUGZmpkJDQxUeHu5S35eSfyznzp1zabt+/fpJklauXKmffvrJ5f02aNBAX375pRo1aqSlS5fqwQcfLPY5AgDgLYS9jTz//PNat26d5s6dW6L2HTt2lCT9z//8j9atW1ew/NixY7rrrrtcPi3dtWtXRUZGKjMzU4MGDSp0Oj8+Pl6TJ0+WJD399NMefwNfkyZNJEmJiYkubdemTRv1799f58+fV3R0tLZv315ofVJSkl566aWL9hEcHKyvvvpKwcHBWrBggUaOHEngA7iiEPYVWJs2bXT33XcrOztbPXr0ULNmzdSqVSuFhIRo586dmj59ukv9WZalJUuWqGHDhkpISFBISIjatGmjZs2aqVevXjpz5oxiYmL08MMPe/xYBgwYIEkaNWqUbrjhBnXp0kVdunTRrl27LrntO++8o6ioKP34449q166dGjdurMjISNWvX1/NmjXT66+/fsk+GjVqpC+//FINGjTQm2++WeKn7gHA5UDYV3CLFy/Wc889p0aNGunnn39WSkqK7r77bm3fvl033nijy/01bdpU3377rZ544gmFhITo+++/14kTJ9SpUyctXLhQCxYs8PioXvpjYuLs2bPVsmVL/fTTT0pMTFRiYmKJJt7VrFlTiYmJiouLU4cOHXT69Gn9+9//VrVq1XT33XeXKOylP459/fr1qlevnl577TU9+eSTpTwqAPAMy1SA841paWlyOBxyOp2qUaOGt8sp95KTkxUWFqawsLCC288AAGWrNFnGyB4uyx8t16xZ07uFAABKxNZhHxcXp4iICEVGRnq7FFv56KOPJMmt0/wAgMuP0/gosalTp2revHlKSkqSj4+PNm/erPbt23u7LACoEDiNj8viwIEDOnz4sP7yl79o+fLlBD0A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", 92 | "text/plain": [ 93 | "
" 94 | ] 95 | }, 96 | "metadata": {}, 97 | "output_type": "display_data" 98 | } 99 | ], 100 | "source": [ 101 | "fig = plt.figure()\n", 102 | "\n", 103 | "\n", 104 | "ax.text(0.12, 0.06, \"(0.15, 0.15)\")\n", 105 | "\n", 106 | "ax = fig.add_axes([0.15, 0.15, 0.68, 0.66])\n", 107 | "ax.set_yticks([1, 2, 3])\n", 108 | "ax.set_xticks([1, 2, 3])\n", 109 | "\n", 110 | "#ax.set_yticklabels(['', '', ''])\n", 111 | "\n", 112 | "ax.set_xlabel(\"x axis\", fontsize=18)\n", 113 | "ax.set_ylabel(\"y axis\", fontsize=18)\n", 114 | "\n", 115 | "ax.set_xlim(1,3)\n", 116 | "ax.set_ylim(1,3)\n", 117 | "\n", 118 | "ax.xaxis.set_minor_locator(mpl.ticker.MultipleLocator(0.25))\n", 119 | "ax.yaxis.set_minor_locator(mpl.ticker.MultipleLocator(0.25))\n", 120 | "\n", 121 | "ax.annotate(\"Major tick\",\n", 122 | " xy=(1, 2), xycoords='data',\n", 123 | " xytext=(+35, +30), textcoords='offset points', fontsize=16,\n", 124 | " arrowprops=dict(arrowstyle=\"->\", connectionstyle=\"arc3, rad=.2\"))\n", 125 | "\n", 126 | "ax.annotate(\"Minor tick\",\n", 127 | " xy=(1, 1.5), xycoords='data',\n", 128 | " xytext=(+35, +30), textcoords='offset points', fontsize=16,\n", 129 | " arrowprops=dict(arrowstyle=\"->\", connectionstyle=\"arc3, rad=.2\"))\n", 130 | "\n", 131 | "fig.savefig(\"figure-axis-schematic.pdf\");" 132 | ] 133 | }, 134 | { 135 | "cell_type": "markdown", 136 | "metadata": {}, 137 | "source": [ 138 | "# Versions" 139 | ] 140 | }, 141 | { 142 | "cell_type": "code", 143 | "execution_count": 4, 144 | "metadata": { 145 | "collapsed": false, 146 | "jupyter": { 147 | "outputs_hidden": false 148 | } 149 | }, 150 | "outputs": [], 151 | "source": [ 152 | "%reload_ext version_information" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": 5, 158 | "metadata": { 159 | "collapsed": false, 160 | "jupyter": { 161 | "outputs_hidden": false 162 | } 163 | }, 164 | "outputs": [ 165 | { 166 | "data": { 167 | "application/json": { 168 | "Software versions": [ 169 | { 170 | "module": "Python", 171 | "version": "3.10.12 64bit [Clang 14.0.6 ]" 172 | }, 173 | { 174 | "module": "IPython", 175 | "version": "8.12.0" 176 | }, 177 | { 178 | "module": "OS", 179 | "version": "macOS 10.15.7 x86_64 i386 64bit" 180 | }, 181 | { 182 | "module": "numpy", 183 | "version": "1.22.3" 184 | }, 185 | { 186 | "module": "matplotlib", 187 | "version": "3.7.1" 188 | } 189 | ] 190 | }, 191 | "text/html": [ 192 | "
SoftwareVersion
Python3.10.12 64bit [Clang 14.0.6 ]
IPython8.12.0
OSmacOS 10.15.7 x86\\_64 i386 64bit
numpy1.22.3
matplotlib3.7.1
Sat Nov 02 18:11:39 2024 JST
" 193 | ], 194 | "text/latex": [ 195 | "\\begin{tabular}{|l|l|}\\hline\n", 196 | "{\\bf Software} & {\\bf Version} \\\\ \\hline\\hline\n", 197 | "Python & 3.10.12 64bit [Clang 14.0.6 ] \\\\ \\hline\n", 198 | "IPython & 8.12.0 \\\\ \\hline\n", 199 | "OS & macOS 10.15.7 x86\\_64 i386 64bit \\\\ \\hline\n", 200 | "numpy & 1.22.3 \\\\ \\hline\n", 201 | "matplotlib & 3.7.1 \\\\ \\hline\n", 202 | "\\hline \\multicolumn{2}{|l|}{Sat Nov 02 18:11:39 2024 JST} \\\\ \\hline\n", 203 | "\\end{tabular}\n" 204 | ], 205 | "text/plain": [ 206 | "Software versions\n", 207 | "Python 3.10.12 64bit [Clang 14.0.6 ]\n", 208 | "IPython 8.12.0\n", 209 | "OS macOS 10.15.7 x86_64 i386 64bit\n", 210 | "numpy 1.22.3\n", 211 | "matplotlib 3.7.1\n", 212 | "Sat Nov 02 18:11:39 2024 JST" 213 | ] 214 | }, 215 | "execution_count": 5, 216 | "metadata": {}, 217 | "output_type": "execute_result" 218 | } 219 | ], 220 | "source": [ 221 | "%version_information numpy, matplotlib" 222 | ] 223 | }, 224 | { 225 | "cell_type": "code", 226 | "execution_count": null, 227 | "metadata": {}, 228 | "outputs": [], 229 | "source": [] 230 | } 231 | ], 232 | "metadata": { 233 | "kernelspec": { 234 | "display_name": "npbook_py310", 235 | "language": "python", 236 | "name": "npbook_py310" 237 | }, 238 | "language_info": { 239 | "codemirror_mode": { 240 | "name": "ipython", 241 | "version": 3 242 | }, 243 | "file_extension": ".py", 244 | "mimetype": "text/x-python", 245 | "name": "python", 246 | "nbconvert_exporter": "python", 247 | "pygments_lexer": "ipython3", 248 | "version": "3.10.12" 249 | } 250 | }, 251 | "nbformat": 4, 252 | "nbformat_minor": 4 253 | } 254 | --------------------------------------------------------------------------------