NumCpp: A Templatized Header Only C++ Implementation of the Python NumPy Library
Author: David Pilger dpilger26@gmail.com
Version: 
License 
Testing
Compilers:
Visual Studio: 2017, 2019
GNU: 6.5, 7.5, 8.4, 9.3, 10.1
Clang: 6, 7, 8, 9, 10
Boost Versions:
1.68+
Documentation
GitHub
Installation
Building
Release Notes
From NumPy To NumCpp – A Quick Start Guide
This quick start guide is meant as a very brief overview of some of the things
that can be done with NumCpp. For a full breakdown of everything available
in the NumCpp library please visit the Full Documentation.
CONTAINERS
The main data structure in NumCpp is the NdArray
. It is inherently a 2D array class, with 1D arrays being implemented as 1xN arrays. There is also a DataCube
class that is provided as a convenience container for storing an array of 2D NdArray
s, but it has limited usefulness past a simple container., NumPy, NumCpp, :--------------------------------------------------------:, :--------------------------------------------------------:, a = np.array([[1, 2], [3, 4], [5, 6]])
, nc::NdArray<int> a = { {1, 2}, {3, 4}, {5, 6} }
, a.reshape([2, 3])
, a.reshape(2, 3)
, a.astype(np.double)
, a.astype<double>()
, ### INITIALIZERS
Many initializer functions are provided that return NdArray
s for common needs., NumPy, NumCpp, :--------------------------------------------------------:, :--------------------------------------------------------:, np.linspace(1, 10, 5)
, nc::linspace<dtype>(1, 10, 5)
, np.arange(3, 7)
, nc::arange<dtype>(3, 7)
, np.eye(4)
, nc::eye<dtype>(4)
, np.zeros([3, 4])
, nc::zeros<dtype>(3, 4)
, nc::NdArray<dtype>(3, 4) a = 0
, np.ones([3, 4])
, nc::ones<dtype>(3, 4)
, nc::NdArray<dtype>(3, 4) a = 1
, np.nans([3, 4])
, nc::nans(3, 4)
, nc::NdArray<double>(3, 4) a = nc::constants::nan
, np.empty([3, 4])
, nc::empty<dtype>(3, 4)
, nc::NdArray<dtype>(3, 4) a
, ### SLICING/BROADCASTING
NumCpp offers NumPy style slicing and broadcasting., NumPy, NumCpp, :--------------------------------------------------------:, :--------------------------------------------------------:, a[2, 3]
, a(2, 3)
, a[2:5, 5:8]
, a(nc::Slice(2, 5), nc::Slice(5, 8))
, a({2, 5}, {5, 8})
, a[:, 7]
, a(a.rSlice(), 7)
, a[a > 5]
, a[a > 50]
, a[a > 5] = 0
, a.putMask(a > 50, 666)
, ### RANDOM
The random module provides simple ways to create random arrays., NumPy, NumCpp, :--------------------------------------------------------:, :--------------------------------------------------------:, np.random.seed(666)
, nc::random::seed(666)
, np.random.randn(3, 4)
, nc::random::randN<double>(nc::Shape(3,4))
, nc::random::randN<double>({3, 4})
, np.random.randint(0, 10, [3, 4])
, nc::random::randInt<int>(nc::Shape(3,4),0,10)
, nc::random::randInt<int>({3, 4},0,10)
, np.random.rand(3, 4)
, nc::random::rand<double>(nc::Shape(3,4))
, nc::random::rand<double>({3, 4})
, np.random.choice(a, 3)
, nc::random::choice(a, 3)
, ### CONCATENATION
Many ways to concatenate NdArray
are available., NumPy, NumCpp, :--------------------------------------------------------:, :--------------------------------------------------------:, np.stack([a, b, c], axis=0)
, nc::stack({a, b, c}, nc::Axis::ROW)
, np.vstack([a, b, c])
, nc::vstack({a, b, c})
, np.hstack([a, b, c])
, nc::hstack({a, b, c})
, np.append(a, b, axis=1)
, nc::append(a, b, nc::Axis::COL)
, ### DIAGONAL, TRIANGULAR, AND FLIP
The following return new NdArray
s., NumPy, NumCpp, :--------------------------------------------------------:, :--------------------------------------------------------:, np.diagonal(a)
, nc::diagonal(a)
, np.triu(a)
, nc::triu(a)
, np.tril(a)
, nc::tril(a)
, np.flip(a, axis=0)
, nc::flip(a, nc::Axis::ROW)
, np.flipud(a)
, nc::flipud(a)
, np.fliplr(a)
, nc::fliplr(a)
, ### ITERATION
NumCpp follows the idioms of the C++ STL providing iterator pairs to iterate on arrays in different fashions., NumPy, NumCpp, :--------------------------------------------------------:, :--------------------------------------------------------:, for value in a
, for(auto it = a.begin(); it < a.end(); ++it)
, for(auto& value : a)
, ### LOGICAL
Logical FUNCTIONS in NumCpp behave the same as NumPy., NumPy, NumCpp, :--------------------------------------------------------:, :--------------------------------------------------------:, np.where(a > 5, a, b)
, nc::where(a > 5, a, b)
, np.any(a)
, nc::any(a)
, np.all(a)
, nc::all(a)
, np.logical_and(a, b)
, nc::logical_and(a, b)
, np.logical_or(a, b)
, nc::logical_or(a, b)
, np.isclose(a, b)
, nc::isclose(a, b)
, np.allclose(a, b)
, nc::allclose(a, b)
, ### COMPARISONS, NumPy, NumCpp, :--------------------------------------------------------:, :--------------------------------------------------------:, np.equal(a, b)
, nc::equal(a, b)
, a == b
, np.not_equal(a, b)
, nc::not_equal(a, b)
, a != b
, rows, cols = np.nonzero(a)
, auto [rows, cols] = nc::nonzero(a)
, ### MINIMUM, MAXIMUM, SORTING, NumPy, NumCpp, :--------------------------------------------------------:, :--------------------------------------------------------:, np.min(a)
, nc::min(a)
, np.max(a)
, nc::max(a)
, np.argmin(a)
, nc::argmin(a)
, np.argmax(a)
, nc::argmax(a)
, np.sort(a, axis=0)
, nc::sort(a, nc::Axis::ROW)
, np.argsort(a, axis=1)
, nc::argsort(a, nc::Axis::COL)
, np.unique(a)
, nc::unique(a)
, np.setdiff1d(a, b)
, nc::setdiff1d(a, b)
, np.diff(a)
, nc::diff(a)
, ### REDUCERS
Reducers accumulate values of NdArray
s along specified axes. When no axis is specified, values are accumulated along all axes., NumPy, NumCpp, :--------------------------------------------------------:, :--------------------------------------------------------:, np.sum(a)
, nc::sum(a)
, np.sum(a, axis=0)
, nc::sum(a, nc::Axis::ROW)
, np.prod(a)
, nc::prod(a)
, np.prod(a, axis=0)
, nc::prod(a, nc::Axis::ROW)
, np.mean(a)
, nc::mean(a)
, np.mean(a, axis=0)
, nc::mean(a, nc::Axis::ROW)
, np.count_nonzero(a)
, nc::count_nonzero(a)
, np.count_nonzero(a, axis=0)
, nc::count_nonzero(a, nc::Axis::ROW)
, ### I/O
Print and file output methods. All NumCpp classes support a print()
method and <<
stream operators., NumPy, NumCpp, :--------------------------------------------------------:, :--------------------------------------------------------:, print(a)
, a.print()
, std::cout << a
, a.tofile(filename, sep=’\n’)
, a.tofile(filename, "\n")
, np.fromfile(filename, sep=’\n’)
, nc::fromfile<dtype>(filename, "\n")
, np.dump(a, filename)
, nc::dump(a, filename)
, np.load(filename)
, nc::load<dtype>(filename)
, ### MATHEMATICAL FUNCTIONS
NumCpp universal functions are provided for a large set number of mathematical functions.