www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - Recently added ndslice API

11 ndslice and ndField constructors was added since ndslice API 
had been reworked. All of them do not perform any memory 
allocations.

mir.ndslice.slice:

- slicedNdField - Creates full featured n-dimensional ndslice 
over an ndField. ndField is a simple user-defined 
multidimensional view that may have only
`auto ref opIndex(size_t[N] indexes...)` primitive.

mir.ndslice.topology:

- cartesian - Multidimensional Cartesian product

- kronecker - Multidimensional Kronecker product

- bitwise - Bitwise slice over an unsigned integral slice. (used 
in tamediadigital/lincount)

- bitpack - Bitpack slice over an unsigned integral slice. (used 
in tamediadigital/hll-d)

- indexed - Multidimensional std.range.indexed analog for 
ndslice. It works like map, e.g. indexes may have any type that 
can be accepted by source's `opIndex` API.

- linspace - Multidimensional evenly spaced numbers over 
specified intervals. It is numpy and matlab analog. linspace does 
not have floating-point related std.range.iota bug (Issue 6531).

mir.ndslice.concatenation (new):

- concatenation, Creates a concatenated view of multiple slices.

- pad, Pads with a constant value.

- padEdge, Pads with the edge values of slice.

- padSymmetric, Pads with the reflection of the slice mirrored 
along the edge of the slice.

- padWrap - Pads with the wrap of the slice along the axis. The 
first values are used to pad the end and the end values are used 
to pad the beginning.

Github:
https://github.com/libmir/mir-algorithm
API:
http://docs.algorithm.dlang.io/
Know bugs:
- `mir.ndslice.topology.map` may not work with LDC because it has 
deprecated DMD FE.

Best regards,
Ilya
Mar 11