github numpy/numpy v1.22.0rc1

latest releases: v1.23.0rc1, v1.24.0.dev0, v1.22.4...
pre-release6 months ago

NumPy 1.22.0 Release Notes

NumPy 1.22.0 is a big release featuring the work of 150 contributers
spread over 575 pull requests. There have been many improvements,
highlights are:

  • Annotations of the main namespace are essentially complete. Upstream
    is a moving target, so there will likely be further improvements,
    but the major work is done. This is probably the most user visible
    enhancement in this release.
  • A preliminary version of the proposed Array-API is provided. This is
    a step in creating a standard collection of functions that can be
    used across application such as CuPy and JAX.
  • NumPy now has a DLPack backend. DLPack provides a common interchange
    format for array (tensor) data.
  • New methods for quantile, percentile, and related functions. The
    new methods provide a complete set of the methods commonly found in
    the literature.
  • A new configurable allocator for use by downstream projects.

These are in addition to the ongoing work to provide SIMD support for
commonly used functions, improvements to F2PY, and better documentation.

The Python versions supported in this release are 3.8-3.10, Python 3.7
has been dropped. Note that 32 bit wheels are only provided for Python
3.8 and 3.9 on Windows, all other wheels are 64 bits on account of
Ubuntu, Fedora, and other Linux distributions dropping 32 bit support.
All 64 bit wheels are also linked with 64 bit OpenBLAS, which should fix
the occasional problems encountered by folks using truly huge arrays.

Expired deprecations

Deprecated numeric style dtype strings have been removed

Using the strings "Bytes0", "Datetime64", "Str0", "Uint32",
and "Uint64" as a dtype will now raise a TypeError.


Expired deprecations for loads, ndfromtxt, and mafromtxt in npyio

numpy.loads was deprecated in v1.15, with the recommendation that
users use pickle.loads instead. ndfromtxt and mafromtxt were both
deprecated in v1.17 - users should use numpy.genfromtxt instead with
the appropriate value for the usemask parameter.



Use delimiter rather than delimitor as kwarg in mrecords

The misspelled keyword argument delimitor of has been changed to delimiter,
using it will emit a deprecation warning.


Passing boolean kth values to (arg-)partition has been deprecated

numpy.partition and numpy.argpartition would previously accept
boolean values for the kth parameter, which would subsequently be
converted into integers. This behavior has now been deprecated.


The np.MachAr class has been deprecated

The numpy.MachAr class and finfo.machar <numpy.finfo> attribute have
been deprecated. Users are encouraged to access the property if interest
directly from the corresponding numpy.finfo attribute.


Compatibility notes

Distutils forces strict floating point model on clang

NumPy now sets the -ftrapping-math option on clang to enforce correct
floating point error handling for universal functions. Clang defaults to
non-IEEE and C99 conform behaviour otherwise. This change (using the
equivalent but newer -ffp-exception-behavior=strict) was attempted in
NumPy 1.21, but was effectively never used.


Removed floor division support for complex types

Floor division of complex types will now result in a TypeError

>>> a = np.arange(10) + 1j* np.arange(10)
>>> a // 1
TypeError: ufunc 'floor_divide' not supported for the input types...


numpy.vectorize functions now produce the same output class as the base function

When a function that respects numpy.ndarray subclasses is vectorized
using numpy.vectorize, the vectorized function will now be
subclass-safe also for cases that a signature is given (i.e., when
creating a gufunc): the output class will be the same as that returned
by the first call to the underlying function.


Python 3.7 is no longer supported

Python support has been dropped. This is rather strict, there are
changes that require Python >= 3.8.


str/repr of complex dtypes now include space after punctuation

The repr of
np.dtype({"names": ["a"], "formats": [int], "offsets": [2]}) is now
dtype({'names': ['a'], 'formats': ['<i8'], 'offsets': [2], 'itemsize': 10}),
whereas spaces where previously omitted after colons and between fields.

The old behavior can be restored via


Corrected advance in PCG64DSXM and PCG64

Fixed a bug in the advance method of PCG64DSXM and PCG64. The bug
only affects results when the step was larger than $2^{64}$ on platforms
that do not support 128-bit integers(e.g., Windows and 32-bit Linux).


Change in generation of random 32 bit floating point variates

There was bug in the generation of 32 bit floating point values from the
uniform distribution that would result in the least significant bit of
the random variate always being 0. This has been fixed.

This change affects the variates produced by the random.Generator
methods random, standard_normal, standard_exponential, and
standard_gamma, but only when the dtype is specified as


C API changes

Masked inner-loops cannot be customized anymore

The masked inner-loop selector is now never used. A warning will be
given in the unlikely event that it was customized.

We do not expect that any code uses this. If you do use it, you must
unset the selector on newer NumPy version. Please also contact the NumPy
developers, we do anticipate providing a new, more specific, mechanism.

The customization was part of a never-implemented feature to allow for
faster masked operations.


New Features

NEP 49 configurable allocators

As detailed in NEP 49, the
function used for allocation of the data segment of a ndarray can be
changed. The policy can be set globally or in a context. For more
information see the NEP and the data_memory{.interpreted-text
role="ref"} reference docs. Also add a NUMPY_WARN_IF_NO_MEM_POLICY
override to warn on dangerous use of transfering ownership by setting


Implementation of the NEP 47 (adopting the array API standard)

An initial implementation of NEP
the array API standard) has been added as numpy.array_api. The
implementation is experimental and will issue a UserWarning on import,
as the array API
is still in
draft state. numpy.array_api is a conforming implementation of the
array API standard, which is also minimal, meaning that only those
functions and behaviors that are required by the standard are
implemented (see the NEP for more info). Libraries wishing to make use
of the array API standard are encouraged to use numpy.array_api to
check that they are only using functionality that is guaranteed to be
present in standard conforming implementations.


Generate C/C++ API reference documentation from comments blocks is now possible

This feature depends on Doxygen in
the generation process and on
Breathe to integrate it
with Sphinx.


Assign the platform-specific c_intp precision via a mypy plugin

The mypy plugin, introduced in
numpy/numpy#17843, has
again been expanded: the plugin now is now responsible for setting the
platform-specific precision of numpy.ctypeslib.c_intp, the latter
being used as data type for various numpy.ndarray.ctypes attributes.

Without the plugin, aforementioned type will default to

To enable the plugin, one must add it to their mypy configuration

plugins = numpy.typing.mypy_plugin


Add NEP 47-compatible dlpack support

Add a ndarray.__dlpack__() method which returns a dlpack C structure
wrapped in a PyCapsule. Also add a np._from_dlpack(obj) function,
where obj supports __dlpack__(), and returns an ndarray.


keepdims optional argument added to numpy.argmin, numpy.argmax

keepdims argument is added to numpy.argmin, numpy.argmax. If set
to True, the axes which are reduced are left in the result as
dimensions with size one. The resulting array has the same number of
dimensions and will broadcast with the input array.


bit_count to compute the number of 1-bits in an integer

Computes the number of 1-bits in the absolute value of the input. This
works on all the numpy integer types. Analogous to the builtin
int.bit_count or popcount in C++.

>>> np.uint32(1023).bit_count()
>>> np.int32(-127).bit_count()


The ndim and axis attributes have been added to numpy.AxisError

The ndim and axis parameters are now also stored as attributes
within each numpy.AxisError instance.


Preliminary support for windows/arm64 target

numpy added support for windows/arm64 target. Please note OpenBLAS
support is not yet available for windows/arm64 target.


Added support for LoongArch

LoongArch is a new instruction set, numpy compilation failure on
LoongArch architecture, so add the commit.


A .clang-format file has been added

Clang-format is a C/C++ code formatter, together with the added
.clang-format file, it produces code close enough to the NumPy
C_STYLE_GUIDE for general use. Clang-format version 12+ is required
due to the use of several new features, it is available in Fedora 34 and
Ubuntu Focal among other distributions.


is_integer is now available to numpy.floating and numpy.integer

Based on its counterpart in Python float and int, the numpy floating
point and integer types now support float.is_integer. Returns True
if the number is finite with integral value, and False otherwise.

>>> np.float32(-2.0).is_integer()
>>> np.float64(3.2).is_integer()
>>> np.int32(-2).is_integer()


Symbolic parser for Fortran dimension specifications

A new symbolic parser has been added to f2py in order to correctly parse
dimension specifications. The parser is the basis for future
improvements and provides compatibility with Draft Fortran 202x.


ndarray, dtype and number are now runtime-subscriptable

Mimicking 585{.interpreted-text role="pep"}, the numpy.ndarray,
numpy.dtype and numpy.number classes are now subscriptable for
python 3.9 and later. Consequently, expressions that were previously
only allowed in .pyi stub files or with the help of
from __future__ import annotations are now also legal during runtime.

>>> import numpy as np
>>> from typing import Any

>>> np.ndarray[Any, np.dtype[np.float64]]
numpy.ndarray[typing.Any, numpy.dtype[numpy.float64]]



ctypeslib.load_library can now take any path-like object

All parameters in the can now take any
python:path-like object{.interpreted-text role="term"}. This includes
the likes of strings, bytes and objects implementing the
__fspath__<os.PathLike.__fspath__>{.interpreted-text role="meth"}


Add smallest_normal and smallest_subnormal attributes to finfo

The attributes smallest_normal and smallest_subnormal are available
as an extension of finfo class for any floating-point data type. To
use these new attributes, write np.finfo(np.float64).smallest_normal
or np.finfo(np.float64).smallest_subnormal.


numpy.linalg.qr accepts stacked matrices as inputs

numpy.linalg.qr is able to produce results for stacked matrices as
inputs. Moreover, the implementation of QR decomposition has been
shifted to C from Python.


numpy.fromregex now accepts os.PathLike implementations

numpy.fromregex now accepts objects implementing the
__fspath__<os.PathLike> protocol, e.g. pathlib.Path.


Add new methods for quantile and percentile

quantile and percentile now have have a method= keyword argument
supporting 13 different methods. This replaces the interpolation=
keyword argument.

The methods are now aligned with nine methods which can be found in
scientific literature and the R language. The remaining methods are the
previous discontinuous variations of the default "linear" one.

Please see the documentation of numpy.percentile for more information.


Missing parameters have been added to the nan<x> functions

A number of the nan<x> functions previously lacked parameters that
were present in their <x>-based counterpart, e.g. the where
parameter was present in numpy.mean but absent from numpy.nanmean.

The following parameters have now been added to the nan<x> functions:

  • nanmin: initial & where
  • nanmax: initial & where
  • nanargmin: keepdims & out
  • nanargmax: keepdims & out
  • nansum: initial & where
  • nanprod: initial & where
  • nanmean: where
  • nanvar: where
  • nanstd: where


Annotating the main Numpy namespace

Starting from the 1.20 release, PEP 484 type annotations have been
included for parts of the NumPy library; annotating the remaining
functions being a work in progress. With the release of 1.22 this
process has been completed for the main NumPy namespace, which is now
fully annotated.

Besides the main namespace, a limited number of sub-packages contain
annotations as well. This includes, among others, numpy.testing,
numpy.linalg and numpy.random (available since 1.21).


Vectorize umath module using AVX-512

By leveraging Intel Short Vector Math Library (SVML), 18 umath functions
(exp2, log2, log10, expm1, log1p, cbrt, sin, cos, tan,
arcsin, arccos, arctan, sinh, cosh, tanh, arcsinh,
arccosh, arctanh) are vectorized using AVX-512 instruction set for
both single and double precision implementations. This change is
currently enabled only for Linux users and on processors with AVX-512
instruction set. It provides an average speed up of 32x and 14x for
single and double precision functions respectively.


OpenBLAS v0.3.17

Update the OpenBLAS used in testing and in wheels to v0.3.17




a70dfdbb1e1dab6d5c10c5534c523288  numpy-1.22.0rc1-cp310-cp310-macosx_10_9_universal2.whl
2cccddd30f5ec841d4ce90530f7762b0  numpy-1.22.0rc1-cp310-cp310-macosx_10_9_x86_64.whl
7b46c1b0f8175b03d0197059c1d3a5d3  numpy-1.22.0rc1-cp310-cp310-macosx_11_0_arm64.whl
7adb43de081457fb9733ef4570a314e9  numpy-1.22.0rc1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
517ec9dede8b479ad986a14912fcc912  numpy-1.22.0rc1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
0379b78e387565067489943ca270ba59  numpy-1.22.0rc1-cp310-cp310-win_amd64.whl
f582541b1e4d322519d4f091a859b2bc  numpy-1.22.0rc1-cp38-cp38-macosx_10_9_universal2.whl
5239cc440f1353555c9e0273d4e68c91  numpy-1.22.0rc1-cp38-cp38-macosx_10_9_x86_64.whl
1a12742a23205cae3d2d5fda5cd8f478  numpy-1.22.0rc1-cp38-cp38-macosx_11_0_arm64.whl
4a45e2633361c367372d6c98d4e13010  numpy-1.22.0rc1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
15cf27d4ac60c720aa3f36308d90deb2  numpy-1.22.0rc1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
7cc2ffcfbe0f11234f7ba6a09e32980e  numpy-1.22.0rc1-cp38-cp38-win32.whl
64104bfd50dee174344d02506ab4c621  numpy-1.22.0rc1-cp38-cp38-win_amd64.whl
74b7c7f59058000d8437476ab880d943  numpy-1.22.0rc1-cp39-cp39-macosx_10_9_universal2.whl
7850ed6e906589c53b6e7187220f8dcc  numpy-1.22.0rc1-cp39-cp39-macosx_10_9_x86_64.whl
2a78c0df6943528302b3141e4b9b594b  numpy-1.22.0rc1-cp39-cp39-macosx_11_0_arm64.whl
1e65939095e4e383de6b8e257136a7a9  numpy-1.22.0rc1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
281f3e861afbff12ae9d0b32d95d89bb  numpy-1.22.0rc1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
f8b7d2e3b3b61894051e258b99cbb7b3  numpy-1.22.0rc1-cp39-cp39-win32.whl
5037a963c1486d9ce2eaa3adf84ab560  numpy-1.22.0rc1-cp39-cp39-win_amd64.whl
f82bd053250eee5dd4f35d2e4b8a8e64  numpy-1.22.0rc1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
17c532b2ccddb54595099c76ea4322b4  numpy-1.22.0rc1.tar.gz


b00d9bf43cc8975cf5e0c211d218e75a3f5ce1ae34dc84d8a489c28a0dba7848  numpy-1.22.0rc1-cp310-cp310-macosx_10_9_universal2.whl
eb6dd744a9f94b424bf70d62b7874798ea95b6b58fb63ec651b69a46872e5bd5  numpy-1.22.0rc1-cp310-cp310-macosx_10_9_x86_64.whl
6759e6dafd96454be2d6dd80674293322191639400832688cd234c5f483ce1a9  numpy-1.22.0rc1-cp310-cp310-macosx_11_0_arm64.whl
2242fa31413e40847016234485f228fa5e082b0c555d3db65fe9aa4efcfb8d8d  numpy-1.22.0rc1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
d0be0eb7df39f0e0732d73250de55e1dcc8086c23db970d5eab85dbf0713502d  numpy-1.22.0rc1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
ccf027e3bbcd06b5c26a0196ddfc24c4d09d2001cc5d38738efff9d9ac8dee58  numpy-1.22.0rc1-cp310-cp310-win_amd64.whl
8c5016694b9bda77cda32ebfdde34d2246978ed4c49e9baab26bcf38621b7390  numpy-1.22.0rc1-cp38-cp38-macosx_10_9_universal2.whl
011e4c430f2e2739e0d182cb7e2b5d47adc46a8db49a788e5798805b7878c4ba  numpy-1.22.0rc1-cp38-cp38-macosx_10_9_x86_64.whl
b0ed56b9d7535d654d2a0478333cc08d1b9849767eafd07e1f6a3d8d90a2cad0  numpy-1.22.0rc1-cp38-cp38-macosx_11_0_arm64.whl
6730a1495f1acedd97e82e32cca4d8dbe07b89f01f395ca02ca4a9e110d9519d  numpy-1.22.0rc1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
56109e7e9b205439990e90682163d8155cf5743efe65c30221ef3834621ffd3f  numpy-1.22.0rc1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
7dbfa0abe053afbcb9e61ec1557556e4e30c3e4b5df4ec7849bf245e8c09feec  numpy-1.22.0rc1-cp38-cp38-win32.whl
013fa3500a6e5b3ba51401056aa9c41d83a7e737959d15f288d410f26cc33896  numpy-1.22.0rc1-cp38-cp38-win_amd64.whl
a2dd58beb8a8266d704a76692e8eb76ff20f5b2940db7aeee216c2dbf226e5c6  numpy-1.22.0rc1-cp39-cp39-macosx_10_9_universal2.whl
e48368972e0999af098e0a6e9a3573895fd4c3b0b2d8c5cf215b17910cd6c124  numpy-1.22.0rc1-cp39-cp39-macosx_10_9_x86_64.whl
2934fb435d85341efb40f9db637a203a042300afdaa49f833608df21a5d8ae30  numpy-1.22.0rc1-cp39-cp39-macosx_11_0_arm64.whl
e981667470ae74f06cfd0d54c5fa9cd88661a27eccaac2cba505039f0b29dc2e  numpy-1.22.0rc1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
5e56515f5abb493bd32d2196ecd3ce794792419adfb7d8b4cccd4ddaf74ab924  numpy-1.22.0rc1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
21613822dd597d4645c586ac21910fded5344f843410dace91c129a38c31d8be  numpy-1.22.0rc1-cp39-cp39-win32.whl
91bb1e29d74a90861e878b0c7bc941a1c0ac051cb4b171dc242e66953c95ca1e  numpy-1.22.0rc1-cp39-cp39-win_amd64.whl
0ebb646ef72a2348036ed1692e6bb3f3dd4f8d026681b7168a9ac988d9832c27  numpy-1.22.0rc1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
d54616321316987e69cb49d76cec8750d9d0160a32f5f5e71ff3f94b010ebc5e  numpy-1.22.0rc1.tar.gz

Don't miss a new numpy release

NewReleases is sending notifications on new releases.