Introduction
Python has proven itself as an important tool for rapid building of models, easy exploration of modeling constructs, and fast analysis of data. As a general-purpose programming language, much useful functionality is contained in additional libraries or modules targeted to support particular application areas and disciplines. Python has long been of interest to the scientific computing community, but recent years have seen its widespread adoption across many different science and engineering fields (not to mention being an increasingly critical language in web design, financial analyses, and numerous other disciplines). And as Python has become increasingly popular, new libraries and tools continue to be developed and enhanced to support scientific and numerical computing, as well as related tasks that arise in data science and machine learning.
While very widely used, Python has some inherent performance limitations in high performance computing environments such as those provided by the NSF’s ACCESS program. As a high-level interpreted language, Python tends to perform more slowly than equivalent C or Fortran code, although that deficiency is offset by the shorter time to develop code and prototyping models and analyses. Nonetheless, a number of strategies and tools are available to extract performance from Python code, as described in our companion tutorial on Python for High Performance.