{"id":14989224,"url":"https://github.com/rougier/scipy-crash-course","last_synced_at":"2026-03-06T09:31:07.355Z","repository":{"id":141859757,"uuid":"172107958","full_name":"rougier/scipy-crash-course","owner":"rougier","description":"Material for a 24 hours course on Scientific Python","archived":false,"fork":false,"pushed_at":"2021-11-17T20:47:24.000Z","size":376,"stargazers_count":103,"open_issues_count":0,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-29T07:28:14.517Z","etag":null,"topics":["course","cython","matplotlib","numba","numpy","python","scipy"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rougier.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-02-22T17:36:01.000Z","updated_at":"2025-09-12T17:03:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"cde73c3c-bab5-4ecc-908d-cbc31fdf23d5","html_url":"https://github.com/rougier/scipy-crash-course","commit_stats":{"total_commits":19,"total_committers":1,"mean_commits":19.0,"dds":0.0,"last_synced_commit":"0e62b6a7ce42c934ce415f784500a59d8cc6534e"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rougier/scipy-crash-course","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rougier%2Fscipy-crash-course","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rougier%2Fscipy-crash-course/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rougier%2Fscipy-crash-course/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rougier%2Fscipy-crash-course/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rougier","download_url":"https://codeload.github.com/rougier/scipy-crash-course/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rougier%2Fscipy-crash-course/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30168967,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T07:56:45.623Z","status":"ssl_error","status_checked_at":"2026-03-06T07:55:55.621Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["course","cython","matplotlib","numba","numpy","python","scipy"],"created_at":"2024-09-24T14:17:53.836Z","updated_at":"2026-03-06T09:31:07.321Z","avatar_url":"https://github.com/rougier.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Scientific Python Crash Course\n\n![](data/XKCD.png)\n\nThis is the material for a 20 hours crash course on Scientific Python\nthat has been split in 5 beginner and 3 advanced\nmodules. Contributions and feedbacks are welcome. Released under a\n[CC-BY 4.0\nInternational](https://creativecommons.org/licenses/by/4.0/legalcode) license.  \n\n\u003ca href=\"http://www.labri.fr/perso/nrougier\"\u003e\u003cimg alt=\"Nicolas P. Rougier\" align=\"right\"/\u003e\u003c/a\u003e\u003cbr/\u003e\u003cbr/\u003e\u003cbr/\u003e\n\n\n## Material\n\n### [1. Installation](lessons/01-installation.md) \u003cimg src=\"https://img.shields.io/badge/1H-Beginner-B39DDB.svg?style=flat-square\" align=\"right\"/\u003e\n\n\u003cimg src=\"data/indent.png\" width=\"10pt\" height=\"180pt\" align=\"left\"/\u003e\n\nThis lesson aims at providing the student with a clean development environment,\nincluding Python installation and essential packages (using the [Anaconda]\ninstaller), a decent text editor (e.g. [emacs], [vim], [atom], [notepad++]), a\ngit command line and a shell. We'll also introduce the Python \u0026 [IPython]\nshells, the [Jupyter] notebook and explains how to run a python\nscript from the command line or from inside the [IPython] shell.  \n\n**Keywords**: `anaconda`, `shell`, `notebook`, `script`, `git`, `editor`  \n**Prerequisites**: None  \n**Resources**: None \n\n\u003cbr/\u003e\n\n\u003c!-- ----------------------------------------------------------------------- --\u003e\n### [2. Introduction](lessons/introduction.md) \u003cimg src=\"https://img.shields.io/badge/3H-Beginner-B39DDB.svg?style=flat-square\" align=\"right\"/\u003e\n\n\u003cimg src=\"data/indent.png\" width=\"10pt\" height=\"160pt\" align=\"left\"/\u003e\n\nWe introduce here the Python language. Only the bare minimum necessary for\ngetting started with Numpy and Scipy is addressed here. To learn more about\nthe language, consider going through the excellent tutorial\nhttps://docs.python.org/tutorial. Dedicated books are also available, such as\nhttp://www.diveintopython.net/.  \n\n**Keywords**: `python`, `types`, `control flow`, `function`, `package`  \n**Prerequisites**: Installation  \n**Resources**: [The Python tutorial](https://docs.python.org/3/tutorial/)\n\n\u003cbr/\u003e\n\n\u003c!-- ----------------------------------------------------------------------- --\u003e\n### [3. Numerical computing (numpy)](https://scipy-lectures.org/intro/numpy/index.html) \u003cimg src=\"https://img.shields.io/badge/3H-Beginner-B39DDB.svg?style=flat-square\" align=\"right\"/\u003e\n\n\u003cimg src=\"data/indent.png\" width=\"10pt\" height=\"140pt\" align=\"left\"/\u003e\n\nThis lesson gives an overview of [NumPy], the core library for performant\nnumerical computing, with support for large, multi-dimensional\narrays and matrices, along with a large collection of high-level mathematical\nfunctions to operate on these arrays.\n\n**Keywords**: `numpy`, `array`, `dtype`, `shape`, `broadcast`  \n**Prerequisites**: Introduction  \n**Resources**: [SciPy Lecture Notes](https://scipy-lectures.org/)\n\n\u003cbr/\u003e\n\n\u003c!-- ----------------------------------------------------------------------- --\u003e\n### [4. Data visualization (matplotlib)](https://github.com/rougier/matplotlib-tutorial) \u003cimg src=\"https://img.shields.io/badge/3H-Beginner-B39DDB.svg?style=flat-square\" align=\"right\"/\u003e\n\n\u003cimg src=\"data/indent.png\" width=\"10pt\" height=\"160pt\" align=\"left\"/\u003e\n\nIn this lesson, we are going to explore [Matplotlib] that is the single most\nused Python package for 2D-graphics. It provides both a very quick way to\nvisualize data from Python and to produce publication-quality figures in many\ndifferent formats. We'll cover only most common use cases.\n\n**Keywords**: `matplotlib`, `figure`, `plot`, `data`  \n**Prerequisites**: Introduction, Numerical computing  \n**Resources**: [Scientific Visulization: Python + Matplotlib](https://www.labri.fr/perso/nrougier/scientific-visualization.html)\n\n\u003cbr/\u003e\n\n\u003c!-- ----------------------------------------------------------------------- --\u003e\n### [5. Scientific computing (scipy)]() \u003cimg src=\"https://img.shields.io/badge/3H-Advanced-EF5350.svg?style=flat-square\" align=\"right\"/\u003e\n\n\u003cimg src=\"data/indent.png\" width=\"10pt\" height=\"140pt\" align=\"left\"/\u003e\n\nWe'll explore the [SciPy] library that contains a large number of independent\nmodules for optimization, linear algebra, integration, interpolation, special\nfunctions, FFT, signal and image processing, ODE solvers and other tasks common\nin science and engineering.\n\n**Keywords**: `linear algebra`, `signal processing`, `analysis`, `integration`, `solvers`  \n**Prerequisites**: Numerical Computing  \n**Resources**: [SciPy Lecture Notes](https://scipy-lectures.org/)\n\n\u003cbr/\u003e\n\n\u003c!-- ----------------------------------------------------------------------- --\u003e\n### [6. Version Control (git)](https://swcarpentry.github.io/git-novice/)  \u003cimg src=\"https://img.shields.io/badge/3H-Advanced-EF5350.svg?style=flat-square\" align=\"right\"/\u003e\n\n\u003cimg src=\"data/indent.png\" width=\"10pt\" height=\"200pt\" align=\"left\"/\u003e\n\nVersion control is the lab notebook of the digital world: it’s what\nprofessionals use to keep track of what they’ve done and to collaborate with\nother people. Every large software development project relies on it, and most\nprogrammers use it for their small jobs as well. And it isn’t just for\nsoftware: books, papers, small data sets, and anything that changes over time\nor needs to be shared can and should be stored in a version control system.\n\n**Keywords**: `git`, `github`, `clone`, `commit`, `push`, `fork`  \n**Prerequisites**: Installation  \n**Resources**: [Software Carpentry](https://software-carpentry.org/)\n\n\u003cbr/\u003e\n\n\n\u003c!-- ----------------------------------------------------------------------- --\u003e\n### [7. Vectorization techniques (numpy)](https://www.labri.fr/perso/nrougier/from-python-to-numpy) \u003cimg src=\"https://img.shields.io/badge/3H-Advanced-EF5350.svg?style=flat-square\" align=\"right\"/\u003e\n\n\u003cimg src=\"data/indent.png\" width=\"10pt\" height=\"140pt\" align=\"left\"/\u003e\n\nThe goal of this lesson is to explain some vectorization techniques that\ncan drastically improve computation, with several orders of magnitude in\nsome cases.\n\n**Keywords**: `Code`, `Problem`, `Spatial`, `Temporal`  \n**Prerequisites**: Numerical Computing  \n**Resources**: [From Python to Numpy](https://www.labri.fr/perso/nrougier/from-python-to-numpy)\n\n\u003cbr/\u003e\n\n\u003c!-- ----------------------------------------------------------------------- --\u003e\n### [8. Interface with C (cython and ctypes)](https://scipy-lectures.org/advanced/interfacing_with_c/interfacing_with_c.html) \u003cimg src=\"https://img.shields.io/badge/3H-Advanced-EF5350.svg?style=flat-square\" align=\"right\"/\u003e\n\n\u003cimg src=\"data/indent.png\" width=\"10pt\" height=\"140pt\" align=\"left\"/\u003e\n\n[Cython] is a static compiler for both the Python programming language and the\nextended Cython programming language that eases the writing of C extensions.\n[Numba] translates Python functions to optimized machine code at runtime (just in\ntime) using the industry-standard LLVM compiler library.\n\n**Keywords**: `Optimization`, `Cython`, `Numba`, `Compiler`, `JIT`  \n**Prerequisites**: Numerical Computing , Vectorization techniques  \n**Resources**: [SciPy Lecture Notes](https://scipy-lectures.org/)\n\n\u003cbr/\u003e\n\n\n### Bibliography\n* [SciPy 1.0: fundamental algorithms for scientific computing in Python](https://www.nature.com/articles/s41592-019-0686-2),  \nP.Virtanen, R.Gommers \u0026 al., Nature Methods, 2020.\n* [Array programming with NumPy](https://www.nature.com/articles/s41586-020-2649-2),   \nC.R. Harris, K.J. Millman \u0026 al., Nature, 2020.\n* [How to transform code into scientific contribution](https://www.frontiersin.org/articles/10.3389/fninf.2017.00069/full),  \nN.P. Rougier \u0026 F.Benureau, Frontiers in Neuroinformatics, 2018.\n* [Ten simple rules for better figures](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1003833),  \nN.P. Rougier, M. Droettboom \u0026 P. E. Bourne, Plos Computational Biology, 2014.\n\n### Copyright notice\n\nCopyright © 2021 [Nicolas P. Rougier](http://www.labri.fr/perso/nrougier) —\nReleased under a [CC-BY 4.0 International](https://creativecommons.org/licenses/by/4.0/legalcode) license.  \nBanner image copyright © Randall Monroe ([XKCD #353](https://xkcd.com/353/)) — \nThis course has been written in November 2021 using:  \n\u003cimg src=\"https://img.shields.io/badge/OSX-12.0.1-999999.svg?style=flat-square\"/\u003e \u003cimg src=\"https://img.shields.io/badge/Emacs-27.2-999999.svg?style=flat-square\"/\u003e \u003cimg src=\"https://img.shields.io/badge/Git-2.30.1-999999.svg?style=flat-square\"/\u003e \u003cimg src=\"https://img.shields.io/badge/Python-3.8.10-999999.svg?style=flat-square\"/\u003e \u003cimg src=\"https://img.shields.io/badge/Numpy-1.20.3-999999.svg?style=flat-square\"/\u003e \u003cimg src=\"https://img.shields.io/badge/Scipy-1.7.1-999999.svg?style=flat-square\"/\u003e \u003cimg src=\"https://img.shields.io/badge/Matplotlib-3.3.4-999999.svg?style=flat-square\"/\u003e \u003cimg src=\"https://img.shields.io/badge/Cython-0.29.24-999999.svg?style=flat-square\"/\u003e \u003cimg src=\"https://img.shields.io/badge/Numba-0.53.1-999999.svg?style=flat-square\"/\u003e\n\n\n\n\n[Anaconda]:   https://www.anaconda.com/\n[Emacs]:      http://www.emacs.org/\n[vim]:        https://www.vim.org/\n[Atom]:       https://atom.io/\n[Notepad++]:  https://notepad-plus-plus.org/\n[IPython]:    http://www.ipython.org/\n[Jupyter]:    http://www.jupyter.org/\n[NumPy]:      http://www.numpy.org/\n[Scipy]:      http://www.scipy.org/\n[Matplotlib]: http://www.matplotlib.org/\n[Cython]:     https://cython.org/\n[Numba]:      https://numba.pydata.org/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frougier%2Fscipy-crash-course","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frougier%2Fscipy-crash-course","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frougier%2Fscipy-crash-course/lists"}