{"id":13834528,"url":"https://github.com/rougier/numpy-tutorial","last_synced_at":"2025-10-10T08:44:16.766Z","repository":{"id":141859626,"uuid":"41163802","full_name":"rougier/numpy-tutorial","owner":"rougier","description":"Numpy beginner tutorial","archived":false,"fork":false,"pushed_at":"2019-10-28T13:49:27.000Z","size":1336,"stargazers_count":494,"open_issues_count":1,"forks_count":162,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-03-29T08:06:00.824Z","etag":null,"topics":["numpy","python","tutorial"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rougier.png","metadata":{"files":{"readme":"README.html","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2015-08-21T15:38:48.000Z","updated_at":"2025-03-27T14:57:31.000Z","dependencies_parsed_at":"2023-07-13T11:45:14.012Z","dependency_job_id":null,"html_url":"https://github.com/rougier/numpy-tutorial","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rougier%2Fnumpy-tutorial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rougier%2Fnumpy-tutorial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rougier%2Fnumpy-tutorial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rougier%2Fnumpy-tutorial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rougier","download_url":"https://codeload.github.com/rougier/numpy-tutorial/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247312077,"owners_count":20918344,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["numpy","python","tutorial"],"created_at":"2024-08-04T14:00:37.482Z","updated_at":"2025-10-10T08:44:16.697Z","avatar_url":"https://github.com/rougier.png","language":"Python","readme":"\u003c?xml version=\"1.0\" encoding=\"utf-8\" ?\u003e\n\u003c!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"\u003e\n\u003chtml xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\"\u003e\n\u003chead\u003e\n\u003cmeta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /\u003e\n\u003cmeta name=\"generator\" content=\"Docutils 0.12: http://docutils.sourceforge.net/\" /\u003e\n\u003ctitle\u003eNumpy tutorial\u003c/title\u003e\n\u003clink rel=\"stylesheet\" href=\"dana.css\" type=\"text/css\" /\u003e\n\u003clink rel=\"stylesheet\" href=\"/usr/locaL/lib/python2.7/site-packages/docutils/writers/html4css1/math.css\" type=\"text/css\" /\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\u003cdiv class=\"document\" id=\"numpy-tutorial\"\u003e\n\u003ch1 class=\"title\"\u003eNumpy tutorial\u003c/h1\u003e\n\u003ch2 class=\"subtitle\" id=\"nicolas-p-rougier\"\u003eNicolas P. Rougier\u003c/h2\u003e\n\n\u003ca class=\"reference external image-reference\" href=\"http://dx.doi.org/10.5281/zenodo.28817\"\u003e\u003cimg alt=\"https://zenodo.org/badge/doi/10.5281/zenodo.28817.png\" src=\"https://zenodo.org/badge/doi/10.5281/zenodo.28817.png\" /\u003e\u003c/a\u003e\n\u003cdiv class=\"contents local topic\" id=\"table-of-contents\"\u003e\n\u003cp class=\"topic-title first\"\u003eTable of Contents\u003c/p\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#introduction\" id=\"id2\"\u003eIntroduction\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#the-game-of-life\" id=\"id3\"\u003eThe Game of Life\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#exercises\" id=\"id4\"\u003eExercises\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#beyond-this-tutorial\" id=\"id5\"\u003eBeyond this tutorial\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference internal\" href=\"#quick-references\" id=\"id6\"\u003eQuick references\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003cp\u003eSources are available from \u003ca class=\"reference external\" href=\"https://github.com/rougier/numpy-tutorial\"\u003egithub\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAll code and material is licensed under a \u003ca class=\"reference external\" href=\"http://creativecommons.org/licenses/by-sa/4.0\"\u003eCreative Commons\nAttribution-ShareAlike 4.0\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eTutorial can be read at \u003ca class=\"reference external\" href=\"http://www.labri.fr/perso/nrougier/teaching/numpy/numpy.html\"\u003ehttp://www.labri.fr/perso/nrougier/teaching/numpy/numpy.html\u003c/a\u003e\u003c/p\u003e\n\u003cdl class=\"docutils\"\u003e\n\u003cdt\u003eSee also:\u003c/dt\u003e\n\u003cdd\u003e\u003cul class=\"first last simple\"\u003e\n\u003cli\u003e\u003ca class=\"reference external\" href=\"http://www.labri.fr/perso/nrougier/teaching/matplotlib/matplotlib.html\"\u003eMatplotlib tutorial\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca class=\"reference external\" href=\"http://www.labri.fr/perso/nrougier/teaching/numpy.100/index.html\"\u003e100 Numpy exercices\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e\n\u003cdiv class=\"section\" id=\"introduction\"\u003e\n\u003ch1\u003e\u003ca class=\"toc-backref\" href=\"#id2\"\u003eIntroduction\u003c/a\u003e\u003c/h1\u003e\n\u003cp\u003eNumPy is the fundamental package for scientific computing with Python. It\ncontains among other things:\u003c/p\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003e→ a powerful N-dimensional array object\u003c/li\u003e\n\u003cli\u003e→ sophisticated (broadcasting) functions\u003c/li\u003e\n\u003cli\u003e→ tools for integrating C/C++ and Fortran code\u003c/li\u003e\n\u003cli\u003e→ useful linear algebra, Fourier transform, and random number capabilities\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"line-block\"\u003e\n\u003cdiv class=\"line\"\u003e\u003cbr /\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eBesides its obvious scientific uses, NumPy can also be used as an efficient\nmulti-dimensional container of generic data. Arbitrary data-types can be\ndefined and this allows NumPy to seamlessly and speedily integrate with a wide\nvariety of projects. We are going to explore numpy through a simple example,\nimplementing the Game of Life.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"the-game-of-life\"\u003e\n\u003ch1\u003e\u003ca class=\"toc-backref\" href=\"#id3\"\u003eThe Game of Life\u003c/a\u003e\u003c/h1\u003e\n\u003cp\u003eNumpy is slanted toward scientific computing and we'll consider in this section\nthe \u003ca class=\"reference external\" href=\"http://en.wikipedia.org/wiki/Conway's_Game_of_Life\"\u003egame of life\u003c/a\u003e by\nJohn Conway which is one of the earliest example of cellular automata (see\nfigure below). Those cellular automaton can be conveniently considered as array\nof cells that are connected together through the notion of neighbours. We'll\nshow in the following sections implementation of this game using pure python\nand numpy in order to illustrate main differences with python and numpy.\u003c/p\u003e\n\u003cdiv class=\"figure\"\u003e\n\u003cimg alt=\"figures/game-of-life.png\" src=\"figures/game-of-life.png\" /\u003e\n\u003cp class=\"caption\"\u003e\u003cstrong\u003eFigure 1\u003c/strong\u003e Simulation of the game of life.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"note\"\u003e\n\u003cp class=\"first admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp class=\"last\"\u003eThis is an excerpt from \u003ca class=\"reference external\" href=\"http://en.wikipedia.org/wiki/Cellular_automaton\"\u003ewikipedia\u003c/a\u003e entry on Cellular\nAutomaton.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eThe Game of Life, also known simply as Life, is a cellular automaton devised\nby the British mathematician John Horton Conway in 1970.  It is the\nbest-known example of a cellular automaton. The \u0026quot;game\u0026quot; is actually a\nzero-player game, meaning that its evolution is determined by its initial\nstate, needing no input from human players. One interacts with the Game of\nLife by creating an initial configuration and observing how it evolves.\u003c/p\u003e\n\u003cp\u003eThe universe of the Game of Life is an infinite two-dimensional orthogonal grid\nof square cells, each of which is in one of two possible states, live or\ndead. Every cell interacts with its eight neighbours, which are the cells that\nare directly horizontally, vertically, or diagonally adjacent. At each step in\ntime, the following transitions occur:\u003c/p\u003e\n\u003col class=\"arabic simple\"\u003e\n\u003cli\u003eAny live cell with fewer than two live neighbours dies, as if by needs caused\nby underpopulation.\u003c/li\u003e\n\u003cli\u003eAny live cell with more than three live neighbours dies, as if by\novercrowding.\u003c/li\u003e\n\u003cli\u003eAny live cell with two or three live neighbours lives, unchanged, to the next\ngeneration.\u003c/li\u003e\n\u003cli\u003eAny dead cell with exactly three live neighbours becomes a live cell.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"line-block\"\u003e\n\u003cdiv class=\"line\"\u003e\u003cbr /\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe initial pattern constitutes the 'seed' of the system.  The first generation\nis created by applying the above rules simultaneously to every cell in the seed\n– births and deaths happen simultaneously, and the discrete moment at which\nthis happens is sometimes called a tick. (In other words, each generation is a\npure function of the one before.)  The rules continue to be applied repeatedly\nto create further generations.\u003c/p\u003e\n\u003cp\u003eWe'll first use a very simple setup and more precisely, we'll use the \u003ca class=\"reference external\" href=\"http://en.wikipedia.org/wiki/Glider_(Conway's_Life)\"\u003eglider\u003c/a\u003e pattern that is known to\nmove one step diagonally in 4 iterations as illustrated below:\u003c/p\u003e\n\u003ctable border=\"1\" class=\"docutils\"\u003e\n\u003ccolgroup\u003e\n\u003ccol width=\"17%\" /\u003e\n\u003ccol width=\"3%\" /\u003e\n\u003ccol width=\"17%\" /\u003e\n\u003ccol width=\"3%\" /\u003e\n\u003ccol width=\"17%\" /\u003e\n\u003ccol width=\"3%\" /\u003e\n\u003ccol width=\"17%\" /\u003e\n\u003ccol width=\"3%\" /\u003e\n\u003ccol width=\"17%\" /\u003e\n\u003c/colgroup\u003e\n\u003ctbody valign=\"top\"\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cimg alt=\"figures/glider-00.png\" class=\"first\" src=\"figures/glider-00.png\" /\u003e\n\u003cp class=\"last\"\u003e\u003cem\u003et = 0\u003c/em\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/glider-01.png\" class=\"first\" src=\"figures/glider-01.png\" /\u003e\n\u003cp class=\"last\"\u003e\u003cem\u003et = 1\u003c/em\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/glider-02.png\" class=\"first\" src=\"figures/glider-02.png\" /\u003e\n\u003cp class=\"last\"\u003e\u003cem\u003et = 2\u003c/em\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/glider-03.png\" class=\"first\" src=\"figures/glider-03.png\" /\u003e\n\u003cp class=\"last\"\u003e\u003cem\u003et = 3\u003c/em\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/glider-04.png\" class=\"first\" src=\"figures/glider-04.png\" /\u003e\n\u003cp class=\"last\"\u003e\u003cem\u003et = 4\u003c/em\u003e\u003c/p\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eThis property will help us debug our scripts.\u003c/p\u003e\n\u003cdiv class=\"section\" id=\"the-way-of-python\"\u003e\n\u003ch2\u003eThe way of python\u003c/h2\u003e\n\u003cdiv class=\"note\"\u003e\n\u003cp class=\"first admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp class=\"last\"\u003eWe could have used the more efficient \u003ca class=\"reference external\" href=\"https://docs.python.org/3/library/array.html\"\u003epython array interface\u003c/a\u003e but people may be more\nfamiliar with the list object.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eIn pure python, we can code the Game of Life using a list of lists representing\nthe board where cells are supposed to evolve:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; Z = [[0,0,0,0,0,0],\n         [0,0,0,1,0,0],\n         [0,1,0,1,0,0],\n         [0,0,1,1,0,0],\n         [0,0,0,0,0,0],\n         [0,0,0,0,0,0]]\n\u003c/pre\u003e\n\u003cp\u003eThis board possesses a \u003ctt class=\"docutils literal\"\u003e0\u003c/tt\u003e border that allows to accelerate things a bit by\navoiding to have specific tests for borders when counting the number of\nneighbours. First step is to count neighbours:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\ndef compute_neigbours(Z):\n    shape = len(Z), len(Z[0])\n    N  = [[0,]*(shape[0])  for i in range(shape[1])]\n    for x in range(1,shape[0]-1):\n        for y in range(1,shape[1]-1):\n            N[x][y] = Z[x-1][y-1]+Z[x][y-1]+Z[x+1][y-1] \\\n                    + Z[x-1][y]            +Z[x+1][y]   \\\n                    + Z[x-1][y+1]+Z[x][y+1]+Z[x+1][y+1]\n    return N\n\u003c/pre\u003e\n\u003cp\u003eTo iterate one step in time, we then simply count the number of neighbours for\neach internal cell and we update the whole board according to the 4 rules:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\ndef iterate(Z):\n    N = compute_neighbours(Z)\n    for x in range(1,shape[0]-1):\n        for y in range(1,shape[1]-1):\n             if Z[x][y] == 1 and (N[x][y] \u0026lt; 2 or N[x][y] \u0026gt; 3):\n                 Z[x][y] = 0\n             elif Z[x][y] == 0 and N[x][y] == 3:\n                 Z[x][y] = 1\n    return Z\n\u003c/pre\u003e\n\u003cdiv class=\"note\"\u003e\n\u003cp class=\"first admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp class=\"last\"\u003eThe \u003ctt class=\"docutils literal\"\u003eshow\u003c/tt\u003e command is supplied witht he script.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eUsing a dedicated display function, we can check the program's correct:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; show(Z)\n[0, 0, 1, 0]\n[1, 0, 1, 0]\n[0, 1, 1, 0]\n[0, 0, 0, 0]\n\n\u0026gt;\u0026gt;\u0026gt; for i in range(4): iterate(Z)\n\u0026gt;\u0026gt;\u0026gt; show(Z)\n[0, 0, 0, 0]\n[0, 0, 0, 1]\n[0, 1, 0, 1]\n[0, 0, 1, 1]\n\u003c/pre\u003e\n\u003cp\u003eYou can download the full script here: \u003ca class=\"reference external\" href=\"scripts/game-of-life-python.py\"\u003egame-of-life-python.py\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"the-way-of-numpy\"\u003e\n\u003ch2\u003eThe way of numpy\u003c/h2\u003e\n\u003cdiv class=\"note\"\u003e\n\u003cp class=\"first admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp class=\"last\"\u003eThere exists \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/reference/routines.array-creation.html\"\u003emany more different ways\u003c/a\u003e\nto create a numpy array.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eThe first thing to do is to create the proper numpy array to hold the\ncells. This can be done very easily with:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; import numpy as np\n\u0026gt;\u0026gt;\u0026gt; Z = np.array([[0,0,0,0,0,0],\n                  [0,0,0,1,0,0],\n                  [0,1,0,1,0,0],\n                  [0,0,1,1,0,0],\n                  [0,0,0,0,0,0],\n                  [0,0,0,0,0,0]])\n\u003c/pre\u003e\n\u003cdiv class=\"note\"\u003e\n\u003cp class=\"first admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp class=\"last\"\u003eFor a complete review on numpy data types, check the \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html\"\u003edocumentation\u003c/a\u003e.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eNote that we did not specify the \u003ca class=\"reference internal\" href=\"#data-type\"\u003edata type\u003c/a\u003e of the array and thus, numpy will\nchoose one for us. Since all elements are integers, numpy will then choose an\ninteger data type. This can be easily checked using:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; print(Z.dtype)\nint64\n\u003c/pre\u003e\n\u003cp\u003eWe can also check the shape of the array to make sure it is 6x6:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; print(Z.shape)\n(6, 6)\n\u003c/pre\u003e\n\u003cp\u003eEach element of \u003ctt class=\"docutils literal\"\u003eZ\u003c/tt\u003e can be accessed using a \u003ctt class=\"docutils literal\"\u003erow\u003c/tt\u003e and a \u003ctt class=\"docutils literal\"\u003ecolumn\u003c/tt\u003e\nindex (in that order):\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; print(Z[0,5])\n0\n\u003c/pre\u003e\n\u003cdiv class=\"note\"\u003e\n\u003cp class=\"first admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp class=\"last\"\u003eThis element access is actually called \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html\"\u003eindexing\u003c/a\u003e and this\nis very powerful tool for vectorized computation.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eBut even better, we can also access a subpart of the array using the slice\nnotation:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; print(Z[1:5,1:5])\n[[0 0 1 0]\n [1 0 1 0]\n [0 1 1 0]\n [0 0 0 0]]\n\u003c/pre\u003e\n\u003cp\u003eIn the example above, we actually extract a subpart of \u003ctt class=\"docutils literal\"\u003eZ\u003c/tt\u003e ranging from rows 1 to\n5 and columns 1 to 5. It is important to understand at this point that this is\nreally a subpart of \u003ctt class=\"docutils literal\"\u003eZ\u003c/tt\u003e in the sense that any change to this subpart will\nhave immediate impact on \u003ctt class=\"docutils literal\"\u003eZ\u003c/tt\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cpre class=\"doctest-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; A = Z[1:5,1:5]\n\u0026gt;\u0026gt;\u0026gt; A[0,0] = 9\n\u0026gt;\u0026gt;\u0026gt; print(A)\n[[9 0 1 0]\n [1 0 1 0]\n [0 1 1 0]\n [0 0 0 0]]\n\u003c/pre\u003e\n\u003cpre class=\"doctest-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; print(Z)\n[[0 0 0 0 0 0]\n [0 9 0 1 0 0]\n [0 1 0 1 0 0]\n [0 0 1 1 0 0]\n [0 0 0 0 0 0]\n [0 0 0 0 0 0]]\n\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eWe set the value of \u003ctt class=\"docutils literal\"\u003eA[0,0]\u003c/tt\u003e to 9 and we see immediate change in \u003ctt class=\"docutils literal\"\u003eZ[1,1]\u003c/tt\u003e\nbecause \u003ctt class=\"docutils literal\"\u003eA[0,0]\u003c/tt\u003e actually corresponds to \u003ctt class=\"docutils literal\"\u003eZ[1,1]\u003c/tt\u003e. This may seem trivial\nwith such simple arrays, but things can become much more complex (we'll see\nthat later). If in doubt, you can check easily if an array is part of another\none:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; print(Z.base is None)\nTrue\n\u0026gt;\u0026gt;\u0026gt; print(A.base is Z)\nTrue\n\u003c/pre\u003e\n\u003cdiv class=\"section\" id=\"counting-neighbours\"\u003e\n\u003ch3\u003eCounting neighbours\u003c/h3\u003e\n\u003cdiv class=\"note\"\u003e\n\u003cp class=\"first admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp class=\"last\"\u003eIt is not always possible to vectorize computations and it requires\ngenerally some experience. You'll acquire this experience by using numpy (of\ncourse) but also by asking questions on the \u003ca class=\"reference external\" href=\"http://mail.scipy.org/mailman/listinfo/numpy-discussion\"\u003emailing list\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eWe now need a function to count the neighbours. We could do it the same way as\nfor the python version, but this would make things very slow because of the\nnested loops. We would prefer to act on the whole array whenever possible, this\nis called \u003cem\u003evectorization\u003c/em\u003e.\u003c/p\u003e\n\u003cp\u003eOk, let's start then...\u003c/p\u003e\n\u003cp\u003eFirst, you need to know that you can manipulate \u003ctt class=\"docutils literal\"\u003eZ\u003c/tt\u003e \u003cem\u003eas if\u003c/em\u003e (and only \u003cem\u003eas\nif\u003c/em\u003e) it was a regular scalar:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; print(1+(2*Z+3))\n[[4 4 4 4 4 4]\n [4 4 4 6 4 4]\n [4 6 4 6 4 4]\n [4 4 6 6 4 4]\n [4 4 4 4 4 4]\n [4 4 4 4 4 4]]\n\u003c/pre\u003e\n\u003cp\u003eIf you look carefully at the output, you may realize that the ouptut\ncorresponds to the formula above applied individually to each element. Said\ndifferently, we have \u003ctt class=\"docutils literal\"\u003e\u003cspan class=\"pre\"\u003e(1+(2*Z+3))[i,j]\u003c/span\u003e == \u003cspan class=\"pre\"\u003e(1+(2*Z[i,j]+3))\u003c/span\u003e\u003c/tt\u003e for any i,j.\u003c/p\u003e\n\u003cp\u003eOk, so far, so good. Now what happens if we add Z with one of its subpart,\nlet's say \u003ctt class=\"docutils literal\"\u003e\u003cspan class=\"pre\"\u003eZ[1:-1,1:-1]\u003c/span\u003e\u003c/tt\u003e ?\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cpre class=\"doctest-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; Z + Z[1:-1,1:-1]\nTraceback (most recent call last):\nFile \u0026quot;\u0026lt;stdin\u0026gt;\u0026quot;, line 1, in \u0026lt;module\u0026gt;\nValueError: operands could not be broadcast together with shapes (6,6) (4,4)\n\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis raises a \u003ctt class=\"docutils literal\"\u003eValue Error\u003c/tt\u003e, but more interestingly, numpy complains about\nthe impossibility of \u003cem\u003ebroadcasting\u003c/em\u003e the two arrays together. \u003ca class=\"reference internal\" href=\"#broadcasting\"\u003eBroadcasting\u003c/a\u003e is\na very powerful feature of numpy and most of the time, it saves you a lot of\nhassle.  Let's consider for example the following code:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; print(Z+1)\n[[1 1 1 1 1 1]\n [1 1 1 2 1 1]\n [1 2 1 2 1 1]\n [1 1 2 2 1 1]\n [1 1 1 1 1 1]\n [1 1 1 1 1 1]]\n\u003c/pre\u003e\n\u003cdiv class=\"note\"\u003e\n\u003cp class=\"first admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp class=\"last\"\u003eSee also \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html\"\u003ethe broadcasting section\u003c/a\u003e in the\nnumpy documentation.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eHow can a matrix and a scalar be added together ? Well, they can't. But numpy\nis smart enough to guess that you actually want to add 1 to each of the element\nof \u003ctt class=\"docutils literal\"\u003eZ\u003c/tt\u003e. This concept of broadcasting is quite powerful and it will take you\nsome time before masterizing it fully (if even possible).\u003c/p\u003e\n\u003cp\u003eHowever, in the present case (counting neighbours if you remember), we won't\nuse broadcasting (uh ?). But we'll use vectorize computation using the\nfollowing code:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; N = np.zeros(Z.shape, dtype=int)\n\u0026gt;\u0026gt;\u0026gt; N[1:-1,1:-1] += (Z[ :-2, :-2] + Z[ :-2,1:-1] + Z[ :-2,2:] +\n                     Z[1:-1, :-2]                + Z[1:-1,2:] +\n                     Z[2:  , :-2] + Z[2:  ,1:-1] + Z[2:  ,2:])\n\u003c/pre\u003e\n\u003cp\u003eTo understand this code, have a look at the figure below:\u003c/p\u003e\n\u003ctable border=\"1\" class=\"docutils\"\u003e\n\u003ccolgroup\u003e\n\u003ccol width=\"33%\" /\u003e\n\u003ccol width=\"33%\" /\u003e\n\u003ccol width=\"33%\" /\u003e\n\u003c/colgroup\u003e\n\u003ctbody valign=\"top\"\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cimg alt=\"figures/neighbours-1.png\" class=\"first last\" src=\"figures/neighbours-1.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/neighbours-2.png\" class=\"first last\" src=\"figures/neighbours-2.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/neighbours-3.png\" class=\"first last\" src=\"figures/neighbours-3.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cimg alt=\"figures/neighbours-4.png\" class=\"first last\" src=\"figures/neighbours-4.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/neighbours-5.png\" class=\"first last\" src=\"figures/neighbours-5.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/neighbours-6.png\" class=\"first last\" src=\"figures/neighbours-6.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cimg alt=\"figures/neighbours-7.png\" class=\"first last\" src=\"figures/neighbours-7.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/neighbours-8.png\" class=\"first last\" src=\"figures/neighbours-8.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/neighbours-9.png\" class=\"first last\" src=\"figures/neighbours-9.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eWhat we actually did with the above code is to add all the darker blue squares\ntogether. Since they have been chosen carefully, the result will be exactly\nwhat we expected. If you want to convince yourself, consider a cell in the\nlighter blue area of the central sub-figure and check what will the result for\na given cell.\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"iterate\"\u003e\n\u003ch3\u003eIterate\u003c/h3\u003e\n\u003cdiv class=\"note\"\u003e\n\u003cp class=\"first admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp class=\"last\"\u003eNote the use of the \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/reference/generated/numpy.ravel.html?highlight=ravel#numpy.ravel\"\u003eravel\u003c/a\u003e function that flatten an array. This is necessary since the argwhere function returns flattened indices.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eIn a first approach, we can write the iterate function using the \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/reference/generated/numpy.argwhere.html\"\u003eargwhere\u003c/a\u003e\nmethod that will give us the indices where a given condition is True.\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\ndef iterate(Z):\n    # Iterate the game of life : naive version\n    # Count neighbours\n    N = np.zeros(Z.shape, int)\n    N[1:-1,1:-1] += (Z[0:-2,0:-2] + Z[0:-2,1:-1] + Z[0:-2,2:] +\n                     Z[1:-1,0:-2]                + Z[1:-1,2:] +\n                     Z[2:  ,0:-2] + Z[2:  ,1:-1] + Z[2:  ,2:])\n    N_ = N.ravel()\n    Z_ = Z.ravel()\n\n    # Apply rules\n    R1 = np.argwhere( (Z_==1) \u0026amp; (N_ \u0026lt; 2) )\n    R2 = np.argwhere( (Z_==1) \u0026amp; (N_ \u0026gt; 3) )\n    R3 = np.argwhere( (Z_==1) \u0026amp; ((N_==2) | (N_==3)) )\n    R4 = np.argwhere( (Z_==0) \u0026amp; (N_==3) )\n\n    # Set new values\n    Z_[R1] = 0\n    Z_[R2] = 0\n    Z_[R3] = Z_[R3]\n    Z_[R4] = 1\n\n    # Make sure borders stay null\n    Z[0,:] = Z[-1,:] = Z[:,0] = Z[:,-1] = 0\n\u003c/pre\u003e\n\u003cp\u003eEven if this first version does not use nested loops, it is far from optimal\nbecause of the use of the 4 argwhere calls that may be quite slow. We can\ninstead take advantages of numpy features the following way.\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\ndef iterate_2(Z):\n    # Count neighbours\n    N = (Z[0:-2,0:-2] + Z[0:-2,1:-1] + Z[0:-2,2:] +\n         Z[1:-1,0:-2]                + Z[1:-1,2:] +\n         Z[2:  ,0:-2] + Z[2:  ,1:-1] + Z[2:  ,2:])\n\n    # Apply rules\n    birth = (N==3) \u0026amp; (Z[1:-1,1:-1]==0)\n    survive = ((N==2) | (N==3)) \u0026amp; (Z[1:-1,1:-1]==1)\n    Z[...] = 0\n    Z[1:-1,1:-1][birth | survive] = 1\n    return Z\n\u003c/pre\u003e\n\u003cp\u003eIf you look at the \u003ctt class=\"docutils literal\"\u003ebirth\u003c/tt\u003e and \u003ctt class=\"docutils literal\"\u003esurvive\u003c/tt\u003e lines, you'll see that these two\nvariables are indeed arrays. The right-hand side of these two expressions are\nin fact logical expressions that will result in boolean arrays (just print them\nto check). We then set all \u003ctt class=\"docutils literal\"\u003eZ\u003c/tt\u003e values to 0 (all cells become dead) and we use\nthe \u003ctt class=\"docutils literal\"\u003ebirth\u003c/tt\u003e and \u003ctt class=\"docutils literal\"\u003esurvive\u003c/tt\u003e arrays to conditionally set \u003ctt class=\"docutils literal\"\u003eZ\u003c/tt\u003e values\nto 1. And we're done ! Let's test this:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; print(Z)\n[[0 0 0 0 0 0]\n [0 0 0 1 0 0]\n [0 1 0 1 0 0]\n [0 0 1 1 0 0]\n [0 0 0 0 0 0]\n [0 0 0 0 0 0]]\n\u0026gt;\u0026gt;\u0026gt; for i in range(4): iterate_2(Z)\n\u0026gt;\u0026gt;\u0026gt; print(Z)\n[[0 0 0 0 0 0]\n [0 0 0 0 0 0]\n [0 0 0 0 1 0]\n [0 0 1 0 1 0]\n [0 0 0 1 1 0]\n [0 0 0 0 0 0]]\n\u003c/pre\u003e\n\u003cp\u003eYou can download the full script here: \u003ca class=\"reference external\" href=\"scripts/game-of-life-numpy.py\"\u003egame-of-life-numpy.py\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"getting-bigger\"\u003e\n\u003ch3\u003eGetting bigger\u003c/h3\u003e\n\u003cp\u003eWhile numpy works perfectly with very small arrays, you'll really benefit from\nnumpy power with big to very big arrays. So let us reconsider the game of life\nwith a bigger array. First, we won't initalize the array by hand but initalize\nit randomly:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; Z = np.random.randint(0,2,(256,512))\n\u003c/pre\u003e\n\u003cp\u003eand we simply iterate as previously:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; for i in range(100): iterate(Z)\n\u003c/pre\u003e\n\u003cp\u003eand display result:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; size = np.array(Z.shape)\n\u0026gt;\u0026gt;\u0026gt; dpi = 72.0\n\u0026gt;\u0026gt;\u0026gt; figsize= size[1]/float(dpi),size[0]/float(dpi)\n\u0026gt;\u0026gt;\u0026gt; fig = plt.figure(figsize=figsize, dpi=dpi, facecolor=\u0026quot;white\u0026quot;)\n\u0026gt;\u0026gt;\u0026gt; fig.add_axes([0.0, 0.0, 1.0, 1.0], frameon=False)\n\u0026gt;\u0026gt;\u0026gt; plt.imshow(Z,interpolation='nearest', cmap=plt.cm.gray_r)\n\u0026gt;\u0026gt;\u0026gt; plt.xticks([]), plt.yticks([])\n\u0026gt;\u0026gt;\u0026gt; plt.show()\n\u003c/pre\u003e\n\u003cimg alt=\"figures/game-of-life-big.png\" src=\"figures/game-of-life-big.png\" /\u003e\n\u003cdiv class=\"line-block\"\u003e\n\u003cdiv class=\"line\"\u003e\u003cbr /\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eEasy enough, no ?\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"a-step-further\"\u003e\n\u003ch2\u003eA step further\u003c/h2\u003e\n\u003cp\u003eWe have reviewed the very basics of numpy so let's move on to more complex (and\nmore fun) things.\u003c/p\u003e\n\u003cdiv class=\"note\"\u003e\n\u003cp class=\"first admonition-title\"\u003eNote\u003c/p\u003e\n\u003cp class=\"last\"\u003eDescription taken from the \u003ca class=\"reference external\" href=\"http://groups.csail.mit.edu/mac/projects/amorphous/GrayScott/\"\u003eGray-Scott homepage\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eReaction and diffusion of chemical species can produce a variety of patterns,\nreminiscent of those often seen in nature. The Gray Scott equations model such\na reaction. For more information on this chemical system see the article\n\u003cstrong\u003eComplex Patterns in a Simple System\u003c/strong\u003e, John E. Pearson, Science, Volume 261,\n9 July 1993.\u003c/p\u003e\n\u003cp\u003eLet's consider two chemical species \u003cspan class=\"formula\"\u003e\u003ci\u003eU\u003c/i\u003e\u003c/span\u003e and \u003cspan class=\"formula\"\u003e\u003ci\u003eV\u003c/i\u003e\u003c/span\u003e with respective\nconcentrations \u003cspan class=\"formula\"\u003e\u003ci\u003eu\u003c/i\u003e\u003c/span\u003e and \u003cspan class=\"formula\"\u003e\u003ci\u003ev\u003c/i\u003e\u003c/span\u003e and diffusion rates \u003cspan class=\"formula\"\u003e\u003ci\u003er\u003c/i\u003e\u003csub\u003e\u003ci\u003eu\u003c/i\u003e\u003c/sub\u003e\u003c/span\u003e and\n\u003cspan class=\"formula\"\u003e\u003ci\u003er\u003c/i\u003e\u003csub\u003e\u003ci\u003ev\u003c/i\u003e\u003c/sub\u003e\u003c/span\u003e. \u003cspan class=\"formula\"\u003e\u003ci\u003eV\u003c/i\u003e\u003c/span\u003e is converted into \u003cspan class=\"formula\"\u003e\u003ci\u003eP\u003c/i\u003e\u003c/span\u003e with a rate of conversion\n\u003cspan class=\"formula\"\u003e\u003ci\u003ek\u003c/i\u003e\u003c/span\u003e. \u003cspan class=\"formula\"\u003e\u003ci\u003ef\u003c/i\u003e\u003c/span\u003e represents the rate of the process that feeds \u003cspan class=\"formula\"\u003e\u003ci\u003eU\u003c/i\u003e\u003c/span\u003e\nand drains \u003cspan class=\"formula\"\u003e\u003ci\u003eU\u003c/i\u003e\u003c/span\u003e, \u003cspan class=\"formula\"\u003e\u003ci\u003eV\u003c/i\u003e\u003c/span\u003e and \u003cspan class=\"formula\"\u003e\u003ci\u003eP\u003c/i\u003e\u003c/span\u003e. We can now write:\u003c/p\u003e\n\u003ctable border=\"1\" class=\"docutils\"\u003e\n\u003ccolgroup\u003e\n\u003ccol width=\"50%\" /\u003e\n\u003ccol width=\"50%\" /\u003e\n\u003c/colgroup\u003e\n\u003cthead valign=\"bottom\"\u003e\n\u003ctr\u003e\u003cth class=\"head\"\u003eChemical reaction\u003c/th\u003e\n\u003cth class=\"head\"\u003eEquations\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody valign=\"top\"\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cul class=\"first last simple\"\u003e\n\u003cli\u003e\u003cspan class=\"formula\"\u003e\u003ci\u003eU\u003c/i\u003e + 2\u003ci\u003eV\u003c/i\u003e⟶3\u003ci\u003eV\u003c/i\u003e\u003c/span\u003e\u003c/li\u003e\n\u003cli\u003e\u003cspan class=\"formula\"\u003e\u003ci\u003eV\u003c/i\u003e⟶\u003ci\u003eP\u003c/i\u003e\u003c/span\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cul class=\"first last simple\"\u003e\n\u003cli\u003e\u003cspan class=\"formula\"\u003e\u003cspan class=\"fraction\"\u003e\u003cspan class=\"ignored\"\u003e(\u003c/span\u003e\u003cspan class=\"numerator\"\u003e∂\u003ci\u003eu\u003c/i\u003e\u003c/span\u003e\u003cspan class=\"ignored\"\u003e)/(\u003c/span\u003e\u003cspan class=\"denominator\"\u003e∂\u003ci\u003et\u003c/i\u003e\u003c/span\u003e\u003cspan class=\"ignored\"\u003e)\u003c/span\u003e\u003c/span\u003e = \u003ci\u003er\u003c/i\u003e\u003csub\u003e\u003ci\u003eu\u003c/i\u003e\u003c/sub\u003e∇\u003csup\u003e2\u003c/sup\u003e\u003ci\u003eu\u003c/i\u003e − \u003ci\u003euv\u003c/i\u003e\u003csup\u003e2\u003c/sup\u003e + \u003ci\u003ef\u003c/i\u003e(1 − \u003ci\u003eu\u003c/i\u003e)\u003c/span\u003e\u003c/li\u003e\n\u003cli\u003e\u003cspan class=\"formula\"\u003e\u003cspan class=\"fraction\"\u003e\u003cspan class=\"ignored\"\u003e(\u003c/span\u003e\u003cspan class=\"numerator\"\u003e∂\u003ci\u003ev\u003c/i\u003e\u003c/span\u003e\u003cspan class=\"ignored\"\u003e)/(\u003c/span\u003e\u003cspan class=\"denominator\"\u003e∂\u003ci\u003et\u003c/i\u003e\u003c/span\u003e\u003cspan class=\"ignored\"\u003e)\u003c/span\u003e\u003c/span\u003e = \u003ci\u003er\u003c/i\u003e\u003csub\u003e\u003ci\u003ev\u003c/i\u003e\u003c/sub\u003e∇\u003csup\u003e2\u003c/sup\u003e\u003ci\u003ev\u003c/i\u003e + \u003ci\u003euv\u003c/i\u003e\u003csup\u003e2\u003c/sup\u003e − (\u003ci\u003ef\u003c/i\u003e + \u003ci\u003ek\u003c/i\u003e)\u003ci\u003ev\u003c/i\u003e\u003c/span\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cdiv class=\"line-block\"\u003e\n\u003cdiv class=\"line\"\u003e\u003cstrong\u003eExamples\u003c/strong\u003e\u003c/div\u003e\n\u003cdiv class=\"line\"\u003e(click figure to see movie)\u003c/div\u003e\n\u003c/div\u003e\n\u003ca class=\"reference external image-reference\" href=\"movies/bacteria.mp4\"\u003e\u003cimg alt=\"figures/bacteria.png\" src=\"figures/bacteria.png\" /\u003e\u003c/a\u003e\n\u003ca class=\"reference external image-reference\" href=\"movies/fingerprint.mp4\"\u003e\u003cimg alt=\"figures/fingerprint.png\" src=\"figures/fingerprint.png\" /\u003e\u003c/a\u003e\n\u003ca class=\"reference external image-reference\" href=\"movies/zebra.mp4\"\u003e\u003cimg alt=\"figures/zebra.png\" src=\"figures/zebra.png\" /\u003e\u003c/a\u003e\n\u003cp\u003eObviously, you may think we need two arrays, one for \u003ctt class=\"docutils literal\"\u003eU\u003c/tt\u003e and for \u003ctt class=\"docutils literal\"\u003eV\u003c/tt\u003e. But\nsince \u003ctt class=\"docutils literal\"\u003eU\u003c/tt\u003e and \u003ctt class=\"docutils literal\"\u003eV\u003c/tt\u003e are tighly linked, it may be indeed better to use a\nsingle array. Numpy allows to do that with the notion of \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/user/basics.rec.html\"\u003estructured array\u003c/a\u003e:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; n = 200\n\u0026gt;\u0026gt;\u0026gt; Z = np.zeros((n+2,n+2), [('U', np.double),\n                             ('V', np.double)])\n\u0026gt;\u0026gt;\u0026gt; print(Z.dtype)\n[('U', '\u0026lt;f8'), ('V', '\u0026lt;f8')]\n\u003c/pre\u003e\n\u003cp\u003eThe size of the array is (n+2,n+2) since we need the borders when computing the\nneighbours. However, we'll compute differential equation only in the center\npart, so we can already creates some useful views of this array:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; U,V = Z['U'], Z['V']\n\u0026gt;\u0026gt;\u0026gt; u,v = U[1:-1,1:-1], V[1:-1,1:-1]\n\u003c/pre\u003e\n\u003cp\u003eNext, we need to compute the Laplacian and we'll use a discrete approximation\nobtained via the \u003ca class=\"reference external\" href=\"http://en.wikipedia.org/wiki/Discrete_Laplace_operator#Finite_Differences\"\u003efinite difference method\u003c/a\u003e using the same vectorization as for the Game of Life:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\ndef laplacian(Z):\n    return (                 Z[0:-2,1:-1] +\n            Z[1:-1,0:-2] - 4*Z[1:-1,1:-1] + Z[1:-1,2:] +\n                             Z[2:  ,1:-1] )\n\u003c/pre\u003e\n\u003cp\u003eFinally, we can iterate the computation after havong choosed some interesting parameters:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\nfor i in range(25000):\n    Lu = laplacian(U)\n    Lv = laplacian(V)\n    uvv = u*v*v\n    u += (Du*Lu - uvv +  F   *(1-u))\n    v += (Dv*Lv + uvv - (F+k)*v    )\n\u003c/pre\u003e\n\u003cp\u003eAnd we're done !\u003c/p\u003e\n\u003cp\u003eYou can download the full script here: \u003ca class=\"reference external\" href=\"scripts/gray-scott.py\"\u003egray-scott.py\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"exercises\"\u003e\n\u003ch1\u003e\u003ca class=\"toc-backref\" href=\"#id4\"\u003eExercises\u003c/a\u003e\u003c/h1\u003e\n\u003cp\u003eHere are some exercises, try to do them without looking at the solution (just\nhighligh the blank part to see it).\u003c/p\u003e\n\u003cdiv class=\"section\" id=\"neophyte\"\u003e\n\u003ch2\u003eNeophyte\u003c/h2\u003e\n\u003col class=\"arabic\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eImport the numpy package under the name \u003ctt class=\"docutils literal\"\u003enp\u003c/tt\u003e\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"keyword namespace\"\u003eimport\u003c/span\u003e \u003cspan class=\"name namespace\"\u003enumpy\u003c/span\u003e \u003cspan class=\"keyword namespace\"\u003eas\u003c/span\u003e \u003cspan class=\"name namespace\"\u003enp\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003ePrint the numpy version and the configuration.\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"keyword\"\u003eprint\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003e__version__\u003c/span\u003e\n\u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003e__config__\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eshow\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e()\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"admonition-hint admonition\"\u003e\n\u003cp class=\"first admonition-title\"\u003eHint\u003c/p\u003e\n\u003cp class=\"last\"\u003eSee \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html\"\u003enp.zeros\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003col class=\"arabic\" start=\"3\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eCreate a null vector of size 10\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003ezeros\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eCreate a null vector of size 10 but the fifth value which is 1\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003ezeros\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e[\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e4\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e]\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"admonition-hint admonition\"\u003e\n\u003cp class=\"first admonition-title\"\u003eHint\u003c/p\u003e\n\u003cp class=\"last\"\u003eSee \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/reference/generated/numpy.arange.html\"\u003enp.arange\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003col class=\"arabic\" start=\"5\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eCreate a vector with values ranging from 10 to 99\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e \u003cspan class=\"operator\"\u003e+\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003earange\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e90\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eCreate a 3x3 matrix with values ranging from 0 to 8\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003earange\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e9\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003ereshape\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e3\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e3\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"admonition-hint admonition\"\u003e\n\u003cp class=\"first admonition-title\"\u003eHint\u003c/p\u003e\n\u003cp class=\"last\"\u003eSee \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/reference/generated/numpy.nonzero.html\"\u003enp.nonzero\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003col class=\"arabic\" start=\"7\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eFind indices of non-zero elements from [1,2,0,0,4,0]\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"keyword\"\u003eprint\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003enonzero\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e([\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e4\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e])\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eDeclare a 3x3 identity matrix\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eeye\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e3\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eDeclare a 5x5 matrix with values 1,2,3,4 just below the diagonal\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003ediag\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"operator\"\u003e+\u003c/span\u003e\u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003earange\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e4\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e),\u003c/span\u003e\u003cspan class=\"name\"\u003ek\u003c/span\u003e\u003cspan class=\"operator\"\u003e=-\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"admonition-hint admonition\"\u003e\n\u003cp class=\"first admonition-title\"\u003eHint\u003c/p\u003e\n\u003cp class=\"last\"\u003eSee \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/reference/routines.random.html\"\u003eRandom sampling\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003col class=\"arabic\" start=\"10\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eDeclare a 10x10x10 array with random values\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e((\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e))\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"novice\"\u003e\n\u003ch2\u003eNovice\u003c/h2\u003e\n\u003col class=\"arabic\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eDeclare a 8x8 matrix and fill it with a checkerboard pattern\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003ezeros\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e((\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e8\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e8\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e))\u003c/span\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e[\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e::\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,::\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e]\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e[::\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e::\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e]\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eDeclare a 10x10 array with random values and find the minimum and maximum values\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e((\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e))\u003c/span\u003e\n\u003cspan class=\"name\"\u003eZmin\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"name\"\u003eZmax\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003emin\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(),\u003c/span\u003e \u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003emax\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e()\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eCreate a checkerboard 8x8 matrix using the tile function\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003etile\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003earray\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e([[\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e],[\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e]]),\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e4\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e4\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e))\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eNormalize a 5x5 random matrix (between 0 and 1)\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e((\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e5\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e5\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e))\u003c/span\u003e\n\u003cspan class=\"name\"\u003eZmax\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"name\"\u003eZmin\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003emax\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(),\u003c/span\u003e \u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003emin\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e()\u003c/span\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e-\u003c/span\u003e \u003cspan class=\"name\"\u003eZmin\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\u003cspan class=\"operator\"\u003e/\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003eZmax\u003c/span\u003e \u003cspan class=\"operator\"\u003e-\u003c/span\u003e \u003cspan class=\"name\"\u003eZmin\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"admonition-hint admonition\"\u003e\n\u003cp class=\"first admonition-title\"\u003eHint\u003c/p\u003e\n\u003cp class=\"last\"\u003eSee the \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/reference/routines.linalg.html\"\u003elinear algebra documentation\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003col class=\"arabic\" start=\"5\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eMultiply a 5x3 matrix by a 3x2 matrix (real matrix product)\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003edot\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eones\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e((\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e5\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e3\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)),\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eones\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e((\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e3\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)))\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eCreate a 10x10 matrix with row values ranging from 0 to 9\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003ezeros\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e((\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e))\u003c/span\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e+=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003earange\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eCreate a vector of size 1000 with values ranging from 0 to 1, both excluded\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003elinspace\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1002\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"name\"\u003eendpoint\u003c/span\u003e\u003cspan class=\"operator\"\u003e=\u003c/span\u003e\u003cspan class=\"name builtin pseudo\"\u003eTrue\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)[\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e:\u003c/span\u003e\u003cspan class=\"operator\"\u003e-\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e]\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eCreate a random vector of size 100 and sort it\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e100\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003esort\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e()\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eConsider two random matrices A anb B, check if they are equal.\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eA\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandint\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e))\u003c/span\u003e\n\u003cspan class=\"name\"\u003eB\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandint\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e))\u003c/span\u003e\n\u003cspan class=\"name\"\u003eequal\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eallclose\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003eA\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"name\"\u003eB\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eCreate a random vector of size 1000 and find the mean value\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1000\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003cspan class=\"name\"\u003em\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003emean\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e()\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"apprentice\"\u003e\n\u003ch2\u003eApprentice\u003c/h2\u003e\n\u003col class=\"arabic\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eConsider a random 100x2 matrix representing cartesian coordinates, convert\nthem to polar coordinates\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e((\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e100\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e))\u003c/span\u003e\n\u003cspan class=\"name\"\u003eX\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"name\"\u003eY\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e[:,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e],\u003c/span\u003e \u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e[:,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e]\u003c/span\u003e\n\u003cspan class=\"name\"\u003eR\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003esqrt\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003eX\u003c/span\u003e\u003cspan class=\"operator\"\u003e**\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"operator\"\u003e+\u003c/span\u003e\u003cspan class=\"name\"\u003eY\u003c/span\u003e\u003cspan class=\"operator\"\u003e**\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003cspan class=\"name\"\u003eT\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003earctan2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003eY\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"name\"\u003eX\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eCreate random vector of size 100 and replace the maximum value by 0\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e100\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e[\u003c/span\u003e\u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eargmax\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e()]\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"literal number integer\"\u003e0\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"admonition-hint admonition\"\u003e\n\u003cp class=\"first admonition-title\"\u003eHint\u003c/p\u003e\n\u003cp class=\"last\"\u003eSee the documentation on \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/user/basics.rec.html\"\u003eStructured arrays\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003col class=\"arabic\" start=\"3\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eDeclare a structured array with \u003ctt class=\"docutils literal\"\u003ex\u003c/tt\u003e and \u003ctt class=\"docutils literal\"\u003ey\u003c/tt\u003e coordinates covering the\n[0,1]x[0,1] area.\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003ezeros\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e((\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e),\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e[(\u003c/span\u003e\u003cspan class=\"literal string\"\u003e'x'\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"name builtin\"\u003efloat\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e),(\u003c/span\u003e\u003cspan class=\"literal string\"\u003e'y'\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"name builtin\"\u003efloat\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)])\u003c/span\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e[\u003c/span\u003e\u003cspan class=\"literal string\"\u003e'x'\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e],\u003c/span\u003e \u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e[\u003c/span\u003e\u003cspan class=\"literal string\"\u003e'y'\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e]\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003emeshgrid\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003elinspace\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e),\u003c/span\u003e\n                             \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003elinspace\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e))\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"admonition-hint admonition\"\u003e\n\u003cp class=\"first admonition-title\"\u003eHint\u003c/p\u003e\n\u003cp class=\"last\"\u003eHave a look at \u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/reference/routines.dtype.html\"\u003eData type routines\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n\u003col class=\"arabic\" start=\"4\"\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003ePrint the minimum and maximum representable value for each numpy scalar type\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"keyword\"\u003efor\u003c/span\u003e \u003cspan class=\"name\"\u003edtype\u003c/span\u003e \u003cspan class=\"operator word\"\u003ein\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e[\u003c/span\u003e\u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eint8\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eint32\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eint64\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e]:\u003c/span\u003e\n   \u003cspan class=\"keyword\"\u003eprint\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eiinfo\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003edtype\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003emin\u003c/span\u003e\n   \u003cspan class=\"keyword\"\u003eprint\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eiinfo\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003edtype\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003emax\u003c/span\u003e\n\u003cspan class=\"keyword\"\u003efor\u003c/span\u003e \u003cspan class=\"name\"\u003edtype\u003c/span\u003e \u003cspan class=\"operator word\"\u003ein\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e[\u003c/span\u003e\u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003efloat32\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003efloat64\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e]:\u003c/span\u003e\n   \u003cspan class=\"keyword\"\u003eprint\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003efinfo\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003edtype\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003emin\u003c/span\u003e\n   \u003cspan class=\"keyword\"\u003eprint\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003efinfo\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003edtype\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003emax\u003c/span\u003e\n   \u003cspan class=\"keyword\"\u003eprint\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003efinfo\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003edtype\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eeps\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eCreate a structured array representing a position (x,y) and a color (r,g,b)\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003ezeros\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e[\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal string\"\u003e'position'\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e[\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal string\"\u003e'x'\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"name builtin\"\u003efloat\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e),\u003c/span\u003e\n                                  \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal string\"\u003e'y'\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"name builtin\"\u003efloat\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)]),\u003c/span\u003e\n                   \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal string\"\u003e'color'\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e    \u003cspan class=\"punctuation\"\u003e[\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal string\"\u003e'r'\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"name builtin\"\u003efloat\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e),\u003c/span\u003e\n                                  \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal string\"\u003e'g'\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"name builtin\"\u003efloat\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e),\u003c/span\u003e\n                                  \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"literal string\"\u003e'b'\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"name builtin\"\u003efloat\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)])])\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eConsider a random vector with shape (100,2) representing coordinates, find\npoint by point distances\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003erandom\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e((\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e10\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e))\u003c/span\u003e\n\u003cspan class=\"name\"\u003eX\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"name\"\u003eY\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eatleast_2d\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e[:,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e]),\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eatleast_2d\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e[:,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e])\u003c/span\u003e\n\u003cspan class=\"name\"\u003eD\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003esqrt\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003eX\u003c/span\u003e\u003cspan class=\"operator\"\u003e-\u003c/span\u003e\u003cspan class=\"name\"\u003eX\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eT\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\u003cspan class=\"operator\"\u003e**\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e \u003cspan class=\"operator\"\u003e+\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003eY\u003c/span\u003e\u003cspan class=\"operator\"\u003e-\u003c/span\u003e\u003cspan class=\"name\"\u003eY\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eT\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\u003cspan class=\"operator\"\u003e**\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eGenerate a generic 2D Gaussian-like array\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eX\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"name\"\u003eY\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003emeshgrid\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003elinspace\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"operator\"\u003e-\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e100\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e),\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003elinspace\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"operator\"\u003e-\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e100\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e))\u003c/span\u003e\n\u003cspan class=\"name\"\u003eD\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003esqrt\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003eX\u003c/span\u003e\u003cspan class=\"operator\"\u003e*\u003c/span\u003e\u003cspan class=\"name\"\u003eX\u003c/span\u003e\u003cspan class=\"operator\"\u003e+\u003c/span\u003e\u003cspan class=\"name\"\u003eY\u003c/span\u003e\u003cspan class=\"operator\"\u003e*\u003c/span\u003e\u003cspan class=\"name\"\u003eY\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003cspan class=\"name\"\u003esigma\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"name\"\u003emu\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"literal number float\"\u003e1.0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e \u003cspan class=\"literal number float\"\u003e0.0\u003c/span\u003e\n\u003cspan class=\"name\"\u003eG\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003eexp\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"operator\"\u003e-\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003eD\u003c/span\u003e\u003cspan class=\"operator\"\u003e-\u003c/span\u003e\u003cspan class=\"name\"\u003emu\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\u003cspan class=\"operator\"\u003e**\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e \u003cspan class=\"operator\"\u003e/\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e \u003cspan class=\"literal number float\"\u003e2.0\u003c/span\u003e \u003cspan class=\"operator\"\u003e*\u003c/span\u003e \u003cspan class=\"name\"\u003esigma\u003c/span\u003e\u003cspan class=\"operator\"\u003e**\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003eConsider the vector [1, 2, 3, 4, 5], how to build a new vector with 3\nconsecutive zeros interleaved between each value ?\u003c/p\u003e\n\u003cpre class=\"code python solution literal-block\"\u003e\n\u003cspan class=\"name\"\u003eZ\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003earray\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e([\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e2\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e3\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e4\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e,\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e5\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e])\u003c/span\u003e\n\u003cspan class=\"name\"\u003enz\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"literal number integer\"\u003e3\u003c/span\u003e\n\u003cspan class=\"name\"\u003eZ0\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003enp\u003c/span\u003e\u003cspan class=\"operator\"\u003e.\u003c/span\u003e\u003cspan class=\"name\"\u003ezeros\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name builtin\"\u003elen\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e \u003cspan class=\"operator\"\u003e+\u003c/span\u003e \u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name builtin\"\u003elen\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003eZ\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\u003cspan class=\"operator\"\u003e-\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e)\u003c/span\u003e\u003cspan class=\"operator\"\u003e*\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e(\u003c/span\u003e\u003cspan class=\"name\"\u003enz\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e))\u003c/span\u003e\n\u003cspan class=\"name\"\u003eZ0\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e[::\u003c/span\u003e\u003cspan class=\"name\"\u003enz\u003c/span\u003e\u003cspan class=\"operator\"\u003e+\u003c/span\u003e\u003cspan class=\"literal number integer\"\u003e1\u003c/span\u003e\u003cspan class=\"punctuation\"\u003e]\u003c/span\u003e \u003cspan class=\"operator\"\u003e=\u003c/span\u003e \u003cspan class=\"name\"\u003eZ\u003c/span\u003e\n\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"beyond-this-tutorial\"\u003e\n\u003ch1\u003e\u003ca class=\"toc-backref\" href=\"#id5\"\u003eBeyond this tutorial\u003c/a\u003e\u003c/h1\u003e\n\u003cp\u003eNumpy benefits from extensive documentation as well as a large community of\nusers and developpers. Here are some links of interest:\u003c/p\u003e\n\u003cdiv class=\"section\" id=\"other-tutorials\"\u003e\n\u003ch2\u003eOther Tutorials\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003e\u003ca class=\"reference external\" href=\"http://scipy-lectures.github.io\"\u003eThe SciPy Lecture Notes\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe SciPy Lecture notes offers a teaching material on the scientific Python\necosystem as well as quick introduction to central tools and techniques. The\ndifferent chapters each correspond to a 1 to 2 hours course with increasing\nlevel of expertise, from beginner to expert.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003e\u003ca class=\"reference external\" href=\"http://www.scipy.org/Tentative_NumPy_Tutorial\"\u003eA Tentative numpy tutorial\u003c/a\u003e\u003c/p\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003ePrerequisites\u003c/li\u003e\n\u003cli\u003eThe Basics\u003c/li\u003e\n\u003cli\u003eShape Manipulation\u003c/li\u003e\n\u003cli\u003eCopies and Views\u003c/li\u003e\n\u003cli\u003eLess Basic\u003c/li\u003e\n\u003cli\u003eFancy indexing and index tricks\u003c/li\u003e\n\u003cli\u003eLinear Algebra\u003c/li\u003e\n\u003cli\u003eTricks and Tips\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"line-block\"\u003e\n\u003cdiv class=\"line\"\u003e\u003cbr /\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003e\u003ca class=\"reference external\" href=\"http://mentat.za.net/numpy/numpy_advanced_slides/\"\u003eNumpy MedKit\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eA first-aid kit for the numerically adventurous by Stéfan van der Walt.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003e\u003ca class=\"reference external\" href=\"http://www.engr.ucsb.edu/~shell/che210d/numpy.pdf\"\u003eAn introduction to Numpy and Scipy\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eA short introduction to Numpy and Scipy by M. Scott Shell.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"numpy-documentation\"\u003e\n\u003ch2\u003eNumpy documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003e\u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/user/\"\u003eUser guide\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThis guide is intended as an introductory overview of NumPy and explains how\nto install and make use of the most important features of NumPy.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003e\u003ca class=\"reference external\" href=\"http://docs.scipy.org/doc/numpy/reference/index.html#reference\"\u003eNumpy reference\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis reference manual details functions, modules, and objects included in\nNumpy, describing what they are and what they do.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp class=\"first\"\u003e\u003ca class=\"reference external\" href=\"http://www.scipy.org/FAQ\"\u003eFAQ\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cul class=\"simple\"\u003e\n\u003cli\u003eGeneral questions about numpy\u003c/li\u003e\n\u003cli\u003eGeneral questions about SciPy\u003c/li\u003e\n\u003cli\u003eBasic SciPy/numpy usage\u003c/li\u003e\n\u003cli\u003eAdvanced NumPy/SciPy usage\u003c/li\u003e\n\u003cli\u003eNumPy/SciPy installation\u003c/li\u003e\n\u003cli\u003eMiscellaneous Issues\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"code-documentation\"\u003e\n\u003ch2\u003eCode documentation\u003c/h2\u003e\n\u003cp\u003eThe code is fairly well documented and you can quickly access a specific\ncommand from within a python session:\u003c/p\u003e\n\u003cpre class=\"literal-block\"\u003e\n\u0026gt;\u0026gt;\u0026gt; import numpy as np\n\u0026gt;\u0026gt;\u0026gt; help(np.ones)\nHelp on function ones in module numpy.core.numeric:\n\nones(shape, dtype=None, order='C')\n    Return a new array of given shape and type, filled with ones.\n\n    Please refer to the documentation for `zeros` for further details.\n\n    See Also\n    --------\n    zeros, ones_like\n\n    Examples\n    --------\n    \u0026gt;\u0026gt;\u0026gt; np.ones(5)\n    array([ 1.,  1.,  1.,  1.,  1.])\n\n    \u0026gt;\u0026gt;\u0026gt; np.ones((5,), dtype=np.int)\n    array([1, 1, 1, 1, 1])\n\n    \u0026gt;\u0026gt;\u0026gt; np.ones((2, 1))\n    array([[ 1.],\n           [ 1.]])\n\n    \u0026gt;\u0026gt;\u0026gt; s = (2,2)\n    \u0026gt;\u0026gt;\u0026gt; np.ones(s)\n    array([[ 1.,  1.],\n           [ 1.,  1.]])\n\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"mailing-lists\"\u003e\n\u003ch2\u003eMailing lists\u003c/h2\u003e\n\u003cp\u003eFinally, there is a \u003ca class=\"reference external\" href=\"https://lists.sourceforge.net/lists/listinfo/numpy-discussion\"\u003emailing list\u003c/a\u003e where you can\nask for help.\u003c/p\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"quick-references\"\u003e\n\u003ch1\u003e\u003ca class=\"toc-backref\" href=\"#id6\"\u003eQuick references\u003c/a\u003e\u003c/h1\u003e\n\u003cdiv class=\"section\" id=\"data-type\"\u003e\n\u003ch2\u003eData type\u003c/h2\u003e\n\u003ctable border=\"1\" class=\"compact-table docutils\"\u003e\n\u003ccolgroup\u003e\n\u003ccol width=\"13%\" /\u003e\n\u003ccol width=\"87%\" /\u003e\n\u003c/colgroup\u003e\n\u003cthead valign=\"bottom\"\u003e\n\u003ctr\u003e\u003cth class=\"head\"\u003eData type\u003c/th\u003e\n\u003cth class=\"head\"\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody valign=\"top\"\u003e\n\u003ctr\u003e\u003ctd\u003ebool\u003c/td\u003e\n\u003ctd\u003eBoolean (True or False) stored as a byte\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eint\u003c/td\u003e\n\u003ctd\u003ePlatform integer (normally either int32 or int64)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eint8\u003c/td\u003e\n\u003ctd\u003eByte (-128 to 127)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eint16\u003c/td\u003e\n\u003ctd\u003eInteger (-32768 to 32767)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eint32\u003c/td\u003e\n\u003ctd\u003eInteger (-2147483648 to 2147483647)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003eint64\u003c/td\u003e\n\u003ctd\u003eInteger (9223372036854775808 to 9223372036854775807)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003euint8\u003c/td\u003e\n\u003ctd\u003eUnsigned integer (0 to 255)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003euint16\u003c/td\u003e\n\u003ctd\u003eUnsigned integer (0 to 65535)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003euint32\u003c/td\u003e\n\u003ctd\u003eUnsigned integer (0 to 4294967295)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003euint64\u003c/td\u003e\n\u003ctd\u003eUnsigned integer (0 to 18446744073709551615)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003efloat\u003c/td\u003e\n\u003ctd\u003eShorthand for float64.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003efloat16\u003c/td\u003e\n\u003ctd\u003eHalf precision float: sign bit, 5 bits exponent, 10 bits mantissa\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003efloat32\u003c/td\u003e\n\u003ctd\u003eSingle precision float: sign bit, 8 bits exponent, 23 bits mantissa\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003efloat64\u003c/td\u003e\n\u003ctd\u003eDouble precision float: sign bit, 11 bits exponent, 52 bits mantissa\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003ecomplex\u003c/td\u003e\n\u003ctd\u003eShorthand for complex128.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003ecomplex64\u003c/td\u003e\n\u003ctd\u003eComplex number, represented by two 32-bit floats\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003ecomplex128\u003c/td\u003e\n\u003ctd\u003eComplex number, represented by two 64-bit floats\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"creation\"\u003e\n\u003ch2\u003eCreation\u003c/h2\u003e\n\u003ctable border=\"1\" class=\"docutils\"\u003e\n\u003ccolgroup\u003e\n\u003ccol width=\"22%\" /\u003e\n\u003ccol width=\"22%\" /\u003e\n\u003ccol width=\"11%\" /\u003e\n\u003ccol width=\"22%\" /\u003e\n\u003ccol width=\"22%\" /\u003e\n\u003c/colgroup\u003e\n\u003cthead valign=\"bottom\"\u003e\n\u003ctr\u003e\u003cth class=\"head\"\u003eCode\u003c/th\u003e\n\u003cth class=\"head\"\u003eResult\u003c/th\u003e\n\u003cth class=\"head\"\u003e\u0026nbsp;\u003c/th\u003e\n\u003cth class=\"head\"\u003eCode\u003c/th\u003e\n\u003cth class=\"head\"\u003eResult\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody valign=\"top\"\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = zeros(9)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/create-zeros-1.png\" class=\"first last\" src=\"figures/create-zeros-1.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = zeros((5,9))\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/create-zeros-2.png\" class=\"first last\" src=\"figures/create-zeros-2.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = ones(9)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/create-ones-1.png\" class=\"first last\" src=\"figures/create-ones-1.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = ones((5,9))\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/create-ones-2.png\" class=\"first last\" src=\"figures/create-ones-2.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = array(\n [0,0,0,0,0,0,0,0,0] )\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/create-list-1.png\" class=\"first last\" src=\"figures/create-list-1.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = array(\n [[0,0,0,0,0,0,0,0,0],\n  [0,0,0,0,0,0,0,0,0],\n  [0,0,0,0,0,0,0,0,0],\n  [0,0,0,0,0,0,0,0,0],\n  [0,0,0,0,0,0,0,0,0]])\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/create-list-2.png\" class=\"first last\" src=\"figures/create-list-2.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = arange(9)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/create-arange-1.png\" class=\"first last\" src=\"figures/create-arange-1.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = arange(5*9).reshape(5,9)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/create-arange-2.png\" class=\"first last\" src=\"figures/create-arange-2.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = random.uniform(0,1,9)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/create-uniform-1.png\" class=\"first last\" src=\"figures/create-uniform-1.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = random.uniform(0,1,(5,9))\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/create-uniform-2.png\" class=\"first last\" src=\"figures/create-uniform-2.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"reshaping\"\u003e\n\u003ch2\u003eReshaping\u003c/h2\u003e\n\u003ctable border=\"1\" class=\"docutils\"\u003e\n\u003ccolgroup\u003e\n\u003ccol width=\"17%\" /\u003e\n\u003ccol width=\"33%\" /\u003e\n\u003ccol width=\"17%\" /\u003e\n\u003ccol width=\"33%\" /\u003e\n\u003c/colgroup\u003e\n\u003cthead valign=\"bottom\"\u003e\n\u003ctr\u003e\u003cth class=\"head\"\u003eCode\u003c/th\u003e\n\u003cth class=\"head\"\u003eResult\u003c/th\u003e\n\u003cth class=\"head\"\u003eCode\u003c/th\u003e\n\u003cth class=\"head\"\u003eResult\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody valign=\"top\"\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ[2,2] = 1\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/reshape-Z.png\" class=\"first last\" src=\"figures/reshape-Z.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = Z.reshape(1,12)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/reshape-Z-reshape(1,12).png\" class=\"first last\" src=\"figures/reshape-Z-reshape(1,12).png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = Z.reshape(4,3)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/reshape-Z-reshape(4,3).png\" class=\"first last\" src=\"figures/reshape-Z-reshape(4,3).png\" /\u003e\n\u003c/td\u003e\n\u003ctd rowspan=\"3\"\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = Z.reshape(12,1)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd rowspan=\"3\"\u003e\u003cimg alt=\"figures/reshape-Z-reshape(12,1).png\" class=\"first last\" src=\"figures/reshape-Z-reshape(12,1).png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = Z.reshape(6,2)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/reshape-Z-reshape(6,2).png\" class=\"first last\" src=\"figures/reshape-Z-reshape(6,2).png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = Z.reshape(2,6)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/reshape-Z-reshape(2,6).png\" class=\"first last\" src=\"figures/reshape-Z-reshape(2,6).png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"slicing\"\u003e\n\u003ch2\u003eSlicing\u003c/h2\u003e\n\u003ctable border=\"1\" class=\"docutils\"\u003e\n\u003ccolgroup\u003e\n\u003ccol width=\"22%\" /\u003e\n\u003ccol width=\"22%\" /\u003e\n\u003ccol width=\"11%\" /\u003e\n\u003ccol width=\"22%\" /\u003e\n\u003ccol width=\"22%\" /\u003e\n\u003c/colgroup\u003e\n\u003cthead valign=\"bottom\"\u003e\n\u003ctr\u003e\u003cth class=\"head\"\u003eCode\u003c/th\u003e\n\u003cth class=\"head\"\u003eResult\u003c/th\u003e\n\u003cth class=\"head\"\u003e\u0026nbsp;\u003c/th\u003e\n\u003cth class=\"head\"\u003eCode\u003c/th\u003e\n\u003cth class=\"head\"\u003eResult\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody valign=\"top\"\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/slice-Z.png\" class=\"first last\" src=\"figures/slice-Z.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ[...] = 1\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/slice-Z[...].png\" class=\"first last\" src=\"figures/slice-Z[...].png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ[1,1] = 1\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/slice-Z[1,1].png\" class=\"first last\" src=\"figures/slice-Z[1,1].png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ[:,0] = 1\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/slice-Z[:,0].png\" class=\"first last\" src=\"figures/slice-Z[:,0].png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ[0,:] = 1\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/slice-Z[0,:].png\" class=\"first last\" src=\"figures/slice-Z[0,:].png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ[2:,2:] = 1\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/slice-Z[2:,2:].png\" class=\"first last\" src=\"figures/slice-Z[2:,2:].png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ[:,::2] = 1\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/slice-Z[:,::2].png\" class=\"first last\" src=\"figures/slice-Z[:,::2].png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ[::2,:] = 1\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/slice-Z[::2,:].png\" class=\"first last\" src=\"figures/slice-Z[::2,:].png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ[:-2,:-2] = 1\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/slice-Z[:-2,:-2].png\" class=\"first last\" src=\"figures/slice-Z[:-2,:-2].png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ[2:4,2:4] = 1\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/slice-Z[2:4,2:4].png\" class=\"first last\" src=\"figures/slice-Z[2:4,2:4].png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ[::2,::2] = 1\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/slice-Z[::2,::2].png\" class=\"first last\" src=\"figures/slice-Z[::2,::2].png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ[3::2,3::2] = 1\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/slice-Z[3::2,3::2].png\" class=\"first last\" src=\"figures/slice-Z[3::2,3::2].png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"broadcasting\"\u003e\n\u003ch2\u003eBroadcasting\u003c/h2\u003e\n\u003ctable border=\"1\" class=\"docutils\"\u003e\n\u003ccolgroup\u003e\n\u003ccol width=\"16%\" /\u003e\n\u003ccol width=\"3%\" /\u003e\n\u003ccol width=\"16%\" /\u003e\n\u003ccol width=\"8%\" /\u003e\n\u003ccol width=\"16%\" /\u003e\n\u003ccol width=\"3%\" /\u003e\n\u003ccol width=\"16%\" /\u003e\n\u003ccol width=\"8%\" /\u003e\n\u003ccol width=\"16%\" /\u003e\n\u003c/colgroup\u003e\n\u003ctbody valign=\"top\"\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cimg alt=\"figures/broadcast-1.1.png\" class=\"first last\" src=\"figures/broadcast-1.1.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e+\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-1.2.png\" class=\"first last\" src=\"figures/broadcast-1.2.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e→\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-1.1.png\" class=\"first last\" src=\"figures/broadcast-1.1.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e+\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-1.3.png\" class=\"first last\" src=\"figures/broadcast-1.3.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e=\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-1.4.png\" class=\"first last\" src=\"figures/broadcast-1.4.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cimg alt=\"figures/broadcast-2.1.png\" class=\"first last\" src=\"figures/broadcast-2.1.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e+\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-2.2.png\" class=\"first last\" src=\"figures/broadcast-2.2.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e→\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-2.1.png\" class=\"first last\" src=\"figures/broadcast-2.1.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e+\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-2.3.png\" class=\"first last\" src=\"figures/broadcast-2.3.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e=\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-2.4.png\" class=\"first last\" src=\"figures/broadcast-2.4.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cimg alt=\"figures/broadcast-3.1.png\" class=\"first last\" src=\"figures/broadcast-3.1.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e+\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-3.2.png\" class=\"first last\" src=\"figures/broadcast-3.2.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e→\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-3.1.png\" class=\"first last\" src=\"figures/broadcast-3.1.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e+\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-3.3.png\" class=\"first last\" src=\"figures/broadcast-3.3.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e=\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-3.4.png\" class=\"first last\" src=\"figures/broadcast-3.4.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cimg alt=\"figures/broadcast-4.1.png\" class=\"first last\" src=\"figures/broadcast-4.1.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e+\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-4.2.png\" class=\"first last\" src=\"figures/broadcast-4.2.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e→\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-4.3.png\" class=\"first last\" src=\"figures/broadcast-4.3.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e+\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-4.4.png\" class=\"first last\" src=\"figures/broadcast-4.4.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e=\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/broadcast-4.5.png\" class=\"first last\" src=\"figures/broadcast-4.5.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003cdiv class=\"section\" id=\"operations\"\u003e\n\u003ch2\u003eOperations\u003c/h2\u003e\n\u003ctable border=\"1\" class=\"docutils\"\u003e\n\u003ccolgroup\u003e\n\u003ccol width=\"27%\" /\u003e\n\u003ccol width=\"36%\" /\u003e\n\u003ccol width=\"36%\" /\u003e\n\u003c/colgroup\u003e\n\u003cthead valign=\"bottom\"\u003e\n\u003ctr\u003e\u003cth class=\"head\"\u003eCode\u003c/th\u003e\n\u003cth class=\"head\"\u003eBefore\u003c/th\u003e\n\u003cth class=\"head\"\u003eAfter\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody valign=\"top\"\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = np.where(Z \u0026gt; 0.5, 0, 1)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/ops-where-before.png\" class=\"first last\" src=\"figures/ops-where-before.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/ops-where-after.png\" class=\"first last\" src=\"figures/ops-where-after.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = np.maximum(Z, 0.5)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/ops-maximum-before.png\" class=\"first last\" src=\"figures/ops-maximum-before.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/ops-maximum-after.png\" class=\"first last\" src=\"figures/ops-maximum-after.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = np.minimum(Z, 0.5)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/ops-minimum-before.png\" class=\"first last\" src=\"figures/ops-minimum-before.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/ops-minimum-after.png\" class=\"first last\" src=\"figures/ops-minimum-after.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cpre class=\"first last literal-block\"\u003e\nZ = np.sum(Z, axis=0)\n\u003c/pre\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/ops-sum-before.png\" class=\"first last\" src=\"figures/ops-sum-before.png\" /\u003e\n\u003c/td\u003e\n\u003ctd\u003e\u003cimg alt=\"figures/ops-sum-after.png\" class=\"first last\" src=\"figures/ops-sum-after.png\" /\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n","funding_links":[],"categories":["Numpy"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frougier%2Fnumpy-tutorial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frougier%2Fnumpy-tutorial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frougier%2Fnumpy-tutorial/lists"}