scipp - Multi-dimensional data arrays with labeled dimensions#

A Python library enabling a modern and intuitive way of working with scientific data in Jupyter notebooks

data-structures plotting masking binning slicing scipp-neutron

Scipp is heavily inspired by xarray. It enriches raw NumPy-like multi-dimensional arrays of data by adding named dimensions and associated coordinates. Multiple arrays can be combined into datasets. While for many applications xarray is certainly more suitable (and definitely much more matured) than Scipp, there is a number of features missing in other situations. If your use case requires one or several of the items on the following list, using Scipp may be worth considering:

  • Physical units are stored with each data or coord array and are handled in arithmetic operations.

  • Propagation of uncertainties.

  • Support for histograms, i.e., bin-edge axes, which are by 1 longer than the data extent.

  • Support for scattered data and non-destructive binning. This includes first and foremost event data, a particular form of sparse data with arrays of random-length lists, with very small list entries.

  • Support for masks stored with data.

  • Internals written in C++ for better performance (for certain applications), in combination with Python bindings.

Generic functionality of Scipp is provided in the scipp Python package. In addition, more specific functionality is made available in other packages. Examples for this are scippnexus for loading NeXus files, scippneutron for handling data from neutron-scattering experiments, and ess for dealing with the specifics of neutron instruments at ESS.


  • [October 2022] scipp-0.17.0 has been released. Check out the What’s new notebook for an overview of recent highlights and major changes.

  • Is your data stored in NeXus files? Checkout our new project scippnexus, a h5py-like utility for conveniently loading NeXus classes into Scipp data structures.

  • We now provide pip packages of scipp, in addition to conda packages. See Installation for details.

  • Scipp changed from GPLv3 to the more permissive BSD-3 license which fits better into the Python eco system.

  • Looking for scipp.neutron? This submodule has been moved into its own package, scippneutron.

Lost? New to Scipp? Start Here!#

The Getting Started section motivates Scipp in What is Scipp?, provides installation instructions, and gives a brief overview in Quick start.

The User Guide provides a high-level overview of the most important Scipp concepts and features. Read Data Structures, Slicing, and Computation (in this order) to develop an understanding of the core concepts of Scipp.

Further sections of the User Guide are optional and can be studied in arbitrary order. Depending on your area of application you may be most interested in Binned Data, Coordinate Transformations, GroupBy, or Masking. The combination of these features is what sets Scipp apart from other Python libraries. Make sure to also check out Representations and Tables and Plotting Overview for an overview of Scipp’s powerful visualization features.

The Reference documentation section provides a detailed listing of all functions and classes of Scipp, as well as some more technical documentation. If you are looking for something in particular, use the Search the docs function in the left navigation panel.

Where can I get help?#

We strive to keep our documentation complete and up-to-date. However, we cannot cover all use-cases and questions users may have.

We use GitHub’s discussions forum for questions that are not answered by these documentation pages. This space can be used to both search through problems already met/solved in the community and open new discussions if none of the existing ones provide a satisfactory answer.