Skip to main content
`Ctrl`+`K`

# Printing NumPy Arrays

This page explains how to control the formatting of printed NumPy arrays. Note that these printing options apply only to arrays, not to scalars.

## Defining printing options

### Applying settings globally

Use `numpy.set_printoptions` to change printing options for the entire runtime session. To inspect current print settings, use `numpy.get_printoptions`:

    >>> np.set_printoptions(precision=2)
    >>> np.get_printoptions()
    {'edgeitems': 3, 'threshold': 1000, 'floatmode': 'maxprec', 'precision': 2, 'suppress': False, 'linewidth': 75, 'nanstr': 'nan', 'infstr': 'inf', 'sign': '-', 'formatter': None, 'legacy': False, 'override_repr': None}

To restore the default settings, use:

    >>> np.set_printoptions(edgeitems=3, infstr='inf',
    ... linewidth=75, nanstr='nan', precision=8,
    ... suppress=False, threshold=1000, formatter=None)

### Applying settings temporarily

Use `numpy.printoptions` as a context manager to temporarily override print settings within a specific scope:

    >>> arr = np.array([0.155, 0.184, 0.173])
    >>> with np.printoptions(precision=2):
    ...     print(arr)
    [0.15 0.18 0.17]

All keywords that apply to `numpy.set_printoptions` also apply to `numpy.printoptions`.

## Changing the number of digits of precision

The default number of fractional digits displayed is 8. You can change this number using `precision` keyword.

    >>> arr = np.array([0.1, 0.184, 0.17322])
    >>> with np.printoptions(precision=2):
    ...     print(arr)
    [0.1 0.18 0.17]

The `floatmode` option determines how the `precision` setting is interpreted. By default, `floatmode=maxprec_equal` displays values with the minimal number of digits needed to uniquely represent them, using the same number of digits across all elements. If you want to show exactly the same number of digits specified by `precision`, use `floatmode=fixed`:

    >>> arr = np.array([0.1, 0.184, 0.173], dtype=np.float32)
    >>> with np.printoptions(precision=2, floatmode="fixed"):
    ...     print(arr)
    [0.10 0.18 0.17]

## Changing how nan and inf are displayed

By default, `numpy.nan` is displayed as nan and `numpy.inf` is displayed as inf. You can override these representations using the `nanstr` and `infstr` options:

    >>> arr = np.array([np.inf, np.nan, 0])
    >>> with np.printoptions(nanstr="NAN", infstr="INF"):
    ...     print(arr)
    [INF NAN  0.]

## Controlling scientific notations

By default, NumPy uses scientific notation when:

- The absolute value of the smallest number is less than `1e-4`, or

- The ratio of the largest to the smallest absolute value is greater than `1e3`

      >>> arr = np.array([0.00002, 210000.0, 3.14])
      >>> print(arr)
      [2.00e-05 2.10e+05 3.14e+00]

To suppress scientific notation and always use fixed-point notation, set `suppress=True`:

    >>> arr = np.array([0.00002, 210000.0, 3.14])
    >>> with np.printoptions(suppress=True):
    ...     print(arr)
    [     0.00002 210000.           3.14   ]

## Applying custom formatting functions

You can apply custom formatting functions to specific or all data types using `formatter` keyword. See `numpy.set_printoptions` for more details on supported format keys.

For example, to format datetime64 values with a custom function:

    >>> arr = np.array([np.datetime64("2025-01-01"), np.datetime64("2024-01-01")])
    >>> with np.printoptions(formatter={"datetime":lambda x: f"(Year: {x.item().year}, Month: {x.item().month})"}):
    ...     print(arr)
    [(Year: 2025, Month: 1) (Year: 2024, Month: 1)]