Nuget packages for Numerics.NET are available in the Nuget Gallery. This page lists the available packages.
The main package is called
Extreme.Numerics and is required
for all applications that use Numerics.NET.
The main library handles calculations with double-precision real and complex numbers.
The classes that work with single-precision
numbers are contained in a separate package,
To work with arbitrary numerical types, including quad-precision
and arbitrary precision numbers requires the
Extreme.Numerics - main package.
Extreme.Numerics.SinglePrecision - single-precision linear algebra and FFT’s.
Extreme.Numerics.Generic - linear algebra for arbitrary types.
Data access libraries
Classes used for loading and saving objects to and from files
are contained in the
The latter package is used for serialization in JSON
and has a dependency on
Extreme.Data - text files (including CSV), R, stata, Matlab…
Extreme.Data.Json - JSON serialization.
For better performance, optimized native linear algebra and FFT libraries based on Intel®’s Math Kernel Library may be used. These come in two variants depending on the interop method: native interop and P/Invoke.
There are separate packages for single and double precision. Each package contains libraries for both x86 and x64 platforms.
Mixed-mode assemblies are the preferred choice for .NET 5.0, .NET Core 3.1 and .NET Framework 4.0+ on Windows.
These assemblies were created using C++/CLI and use native interop to call into the native code. This allows the native code to be called with minimal overhead. Unfortunately, this option is not available in environments that do not support mixed mode assemblies, such as .NET Core or Linux.
Each target framework (.NET 5.0, .NET Core 3.1 and .NET Framework 4.0+) has its own packages. There are two versions of each package. One contains both 32 and 64 bit versions of the native libraries. The other contains only 64 bit binaries.
In addition, there are versions that use the parallel and the sequential threading library of the Intel® Math Kernel Libraries. The parallel variant uses OpenMP to parallellize the calculation. The sequential library does not, and can be called safely from multiple threads.
Extreme.Numerics.Mkl.net5.0 - mixed-mode MKL provider for .NET 5.0 and later.
Extreme.Numerics.Mkl.netcoreapp3.1 - mixed-mode MKL provider for .NET Core 3.1.
Extreme.Numerics.Mkl.net40 - mixed-mode MKL provider for .NET Framework 4.0 and later.
Extreme.Numerics.Mkl.net40.SinglePrecision - single-precision mixed-mode MKL provider for .NET Framework 4.0 and later.
Extreme.Numerics.Mkl.net35 - mixed-mode MKL provider for .NET Framework 3.5.
Extreme.Numerics.Mkl.net35.SinglePrecision - single-precision mixed-mode MKL provider for .NET Framework 3.5.
P/Invoke based interop packages
While the native interop used by mixed-mode assemblies has the best possible performance, the drawback is that it is available only on the classic .NET Framework on Windows and not on more recent platforms like .NET Core, or on Linux. The P/Invoke based native libraries address this limitation.
There are separate packages for single or double precision operations, and for Windows or Linux.
Extreme.Numerics.Mkl.Windows - P/Invoke based MKL provider for Windows.
Extreme.Numerics.Mkl.Linux - P/Invoke based MKL provider for Linux.
Extreme.Numerics.Mkl.SinglePrecision.Windows - single-precision P/Invoke based MKL provider for Windows.
Extreme.Numerics.Mkl.SinglePrecision.Linux - single-precision P/Invoke based MKL provider for Linux.
A separate package provides support for GPU computing based on NVIDIA® CUDA. This package is only available as a mixed-mode assembly for x64:
- Extreme.Numerics.Cuda.net40 - mixed-mode CUDA provider for .NET 4.0 and later (64 bit only).
Language interface libraries
These packages provide additional features that are specific to programming languages. There is a package for F# and one for IronPython.