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 NdArrays, 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 NdArrays 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 NdArrays.
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 NdArrays 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.