- Generic Multidimensional arrays of three kinds
std.range,std.functional, and partiallystd.algorithmalternative suitable for fast executaion and multidimensional algorithms.- Iterators like random access iterators in C++, Fields, and ndFields.
http://docs.algorithm.dlang.io
https://rawgit.com/libmir/mir-algorithm/master/ndslice.svg
- mir.ndslice.topology - Multidimensional
std.rangeanalog. Includesbitwise,bitpack,zip,unzip,map,indexedand many other features. - mir.ndslice.concatenation - Concatenation and padding
- mir.ndslice.algorithm - Slim multidimensional
std.algorithmanalog - mir.ndslice.sorting - Multidimensional sorting utilities
ndslice design was changed. New ndslices can be created on top of random access iterators including pointers. There are three kinds of ndslice:
Contiguous- Contiguous in memory representation. It does not store strides and can be always flattened to 1 dimensional ndslice on top of the same iterator type.Canonical- BLAS like. Stride for row dimension assumed to be equal to 1.Universal- Numpy like. Each dimension has strides. All dimensions can be exchanged without reallocation. The old ndslice ABI corresponds to to theUniversalndslice.
- With LDC <=1.1.0
mir.ndslice.topology.mapmay not work because LDC has deprecated DMD FE. - With LDC ==1.2.0-beta1 compiled with LLVM 4.0 some code from
mir.algorithmmay not work because ldc-developers/ldc#2037.
If you are looking for old ndslice, please use the main repo with old tag v0.22.1.