SayDeploy Plain comparisons of developer tools, AI coding tools included

MLX alternatives in 2026 for NumPy-style array code

Compare MLX alternatives for NumPy-style array code: Bottleneck, CuPy, Numba, JAX and PyOverdrive, with what each one does.

By SayDeploy ยท

SayDeploy is published by LunarWerx, which makes some of the tools compared here.

Compare MLX alternatives for NumPy-style array work: CPU speed-ups, GPU array libraries, compilers, and PyOverdrive. This page covers Bottleneck, CuPy, Numba, JAX and PyOverdrive, and says what each one does.

OptionWhat it doesInstall or license
BottleneckCollection of fast NumPy array functions written in C. [1]Binary wheels on PyPI for the most common platforms. [1] Python version: not published. Simplified BSD license. [1]
CuPyOpen-source GPU array library for Python. [2]Wheels for Linux and Windows. [2] Python version: not published. License: not published.
NumbaOpen source JIT compiler that translates a subset of Python and NumPy code into fast machine code. [3]Install method: not published. Supports Python 3.9-3.12. [3] License: not published.
JAXUses XLA to compile NumPy programs for TPUs, GPUs and other accelerators. [4]CPU install with pip install -U jax. [4] Python version: not published. Apache-2.0 license. [4]
PyOverdrivePatches supported NumPy functions so existing code uses faster paths. [5]Installs with pip from the GitHub repository. [5] Needs Python 3.12 or newer. [5] MIT License. [5]

Why developers look past MLX

MLX is a NumPy-like array framework built for efficient and flexible machine learning on Apple silicon. [6] It is brought to users by Apple machine learning research. [6] A developer looking past MLX has one of a few specific needs, and naming the need first makes the choice easier.

The first need is hardware. A project that must run on machines outside Apple silicon needs an option whose facts cover those machines, and the sections below say what each option's page states about its platforms.

The second need is NumPy behavior. Code that depends on specific NumPy functions should be checked against each option, and the option that handles those calls is the one to keep.

The third need is a particular kind of speed-up. Some projects need a faster path on the CPU, others need a GPU, and others need compiled code, so the options below are described one at a time.

Bottleneck: fast NumPy array functions written in C

Bottleneck is a collection of fast NumPy array functions written in C. [1] Binary wheels are prebuilt packages. It is distributed under a Simplified BSD license. [1] Developers who already use NumPy functions and want specific calls faster can check whether Bottleneck covers those calls.

CuPy: an open-source GPU array library for Python

CuPy is an open-source GPU array library for Python. [2] It provides wheels, which are prebuilt packages, for Linux and Windows. [2] Check the operations your code runs and the platform you develop on before you choose it.

Numba: compiles Python and NumPy functions to machine code

Numba is an open source JIT compiler that translates a subset of Python and NumPy code into fast machine code. [3] JIT, short for just-in-time, is the term for a compiler that works on code as it runs. Numba supports Python 3.9 to 3.12. [3] It also works with Jupyter notebooks and with distributed execution frameworks like Dask and Spark. [3] Check whether the functions you want to speed up fall within the subset Numba translates.

JAX: compiles NumPy programs for accelerators

JAX uses a compiler called XLA to compile NumPy programs for TPUs, GPUs and other hardware accelerators. [4] JAX is licensed under Apache-2.0. [4] The CPU build installs with pip install -U jax. [4] Check whether the machine you develop on has a GPU or other accelerator before you choose a build.

PyOverdrive: faster paths for supported NumPy functions

PyOverdrive is made by the team that publishes this site. PyOverdrive patches supported NumPy functions so your existing code uses faster paths, and calls it does not support run on stock NumPy. [5] A fast path runs only when a check confirms the input is in its measured range, and anything else, or a fast path that raises an error, goes to stock NumPy. [5] Threaded paths for several functions, such as sin, cos and log, run only on large arrays, with the size limit set for each function and data type. [5] Large np.einsum calls are sent through NumPy's own optimize planner once they pass a measured size threshold. [5]

A self-check compares every fast path with stock NumPy on your own machine. [5] A calibration step re-times the threaded paths on your own CPU and switches off any that do not pay there. [5] A demo times the headline operations with stock NumPy and with PyOverdrive on your machine, in about 20 seconds. [5]

PyOverdrive is open source under the MIT License. [5] It needs Python 3.12 or newer. [5] It installs with pip straight from the GitHub repository. [5] The package is marked OS independent, and its test suite has been run on Windows and on Linux x86-64. [5] Its version is 1.0.0 and its status is Beta. [5]

How to pick the right MLX alternative

If your code runs on Apple silicon and you want MLX's own array framework, stay with MLX. [6]

If the main need is faster NumPy functions on a CPU, check Bottleneck, which is a collection of fast NumPy array functions written in C. [1]

If the work needs a GPU, check CuPy, an open-source GPU array library for Python. [2] Confirm your platform first, because its wheels are published for Linux and Windows. [2]

If you want Python and NumPy code compiled to machine code, check Numba. [3] Its supported Python versions run from 3.9 to 3.12. [3]

If the work is NumPy code that should run on TPUs or other accelerators, check JAX. [4]

If you want existing NumPy code to use faster paths for supported functions, check PyOverdrive. [5] Its fast paths fall back to stock NumPy whenever an input is outside the measured range. [5]

Whichever option you pick, read its license and Python version requirements before you install it.

Frequently asked questions

Is Bottleneck an alternative to MLX for NumPy functions?

Bottleneck is a collection of fast NumPy array functions written in C. [1] It is distributed under a Simplified BSD license. [1] Its page says it provides binary wheels on PyPI for the most common platforms. [1] Check whether the NumPy functions your code uses are among the ones it provides before you switch.

Which platforms does CuPy install on?

CuPy provides prebuilt wheels for Linux and Windows. [2] Its page describes CuPy as an open-source GPU array library for Python. [2] For other systems, check CuPy's own documentation before you choose it.

Which Python versions does Numba support?

Numba supports Python 3.9 to 3.12. [3] It is an open source JIT compiler, short for just-in-time compiler, that translates a subset of Python and NumPy code into fast machine code. [3] Check that your project's Python version falls in that range before you choose it.

What license does JAX use?

JAX is licensed under Apache-2.0. [4] The CPU build installs with pip install -U jax. [4] Read the license terms before you build a project on JAX.

Can PyOverdrive run NumPy code without changing it?

PyOverdrive patches supported NumPy functions so existing code uses faster paths, and calls it does not support run on stock NumPy. [5] A fast path runs only when a check confirms the input is in its measured range. [5] A self-check compares every fast path with stock NumPy on your own machine. [5] Check which NumPy functions your code calls, since those are the functions the package covers.

It is open source under the MIT License. [5]

Try PyOverdrive

Sources

  1. Bottleneck, github.com/pydata/bottleneck, read 2026-10-07
  2. CuPy, cupy.dev, read 2026-10-07
  3. Numba, numba.pydata.org, read 2026-10-07
  4. JAX, github.com/jax-ml/jax, read 2026-10-07
  5. PyOverdrive's own description of itself (the product of this site's publisher)
  6. MLX, ml-explore.github.io/mlx/build/html/index.html, read 2026-10-20

Related comparisons