Industrial Data Science
in C# and .NET:
Simple. Fast. Reliable.
 
 

ILNumerics - Technical Computing

Modern High Performance Tools for Technical

Computing and Visualization in Industry and Science

Compatibility & Requirements

This page gives a comprehensive list of system requirements, compatible features and differences between modern ILNumerics (version 5 and higher) and numpy ndarray 1.13 and the Matlab® framework.

System Requirements

ILNumerics Computing Engine, version 5

  • .NET Framework version 4.5.2 or higher. Optional: Visual Studio 2013...2017

ILNumerics Computing Engine, version 6 and higher

  • .NET Framework 4.6.1 or higher, .NET Standard 2.1, or .NET 5.0 or higher. Optional: Visual Studio 2019 or higher.
  • A recent Windows version is recommended. But ILNumerics also runs fully managed on any platform supporting .NET.

Compatibilities

  • ILNumerics arrays fully support the feature set and semantic of numpy and Matlab. Exceptions are listed below. See: Arrays documentation
  • Arrays are thread safe.
  • Arrays support 0 ... n dimensions, all indexing / view features and arbitrary storage orders.
  • All numeric primitive element types and complex numbers in single and double precision are supported.
  • Support for NaNs, empty arrays and numpy scalars.
  • Array sizes are not limited by the inherent .NET array size limit (~3GB): elements are stored on process heap.

See also:

Numpy incompatibilities

In earlier versions ILNumerics arrays had more in common with Matlab than with numpy . Since version 5 you can use the new array style setting in order to make arrays act like numpy ndarrays. The following minor differences must be kept in mind, though:

  • Positive strides only: when indexing with ranges / slices and custom step sizes, ILNumerics allows positive steps only. Advanced indexing with downward counting indices can be used in order to flip dimensions.
  • Scalars: No difference here: 'scalars' in numpy were introduced to compensate for the lack of numeric primitive types in python. On .NET we have excellent support for native primitives. With version 5 support for numpys 'scalar arrays' is added: They are realized by regular ILNumerics arrays, having 0 or more dimensions and exactly 1 element. Such arrays can be used in the very same way as any other ILNumerics array.
  • There is no distinction between views and copies in ILNumerics (as there is in numpy). All subarrays semantically act as copies in ILNumerics and such a copy does not alter the underlying storage of the original array when modified ('lazy copy on write'). 
  • ILNumerics arrays know the concept of 'virtual dimensions': next to the dimensions actually stored in the array any number of additional 'virtual', singleton dimensions can be addressed. One advantage: a scalar S can conveniently be indexed by S[0]
  • The maximum number of dimensions stored into an ILNumerics array is currently limited to 7  Edit: the limitation from version 5.0 has been released in version 5.1. ILNumerics arrays can have up to 32 dimensions.
  • ILNumerics already implements future numpy (indexing) features, planned for upcoming versions of numpy. F.e.: boolean scalars are considered valid indices already.
  • Reducing empty arrays: np.zeros([0,2]).sum() -> gives 0.0 in numpy. ILNumerics retains an empty working dimension: the output has the same number and length of dimensions, except that the working dimension in the output is 1 for non-empty input lengths and 0 for empty input lengths.
  • any(), all() on empty A: reduced dimension ‘dim’ is set to length 1, even if A.S[dim] == 0. If elements are ‘created’ by the new singleton dimension, their value is always false. In numpy they are false for all(), but true for any().
  • A.flat on an array A returns a readonly iterator in row major order. Changing iteration values is not supported. This is due to the strong types of arrays and the distinction between mutable and immutable arrays. ILNumerics maintains the functionality separately: indices for iteration (Size.Iterator) and a pointer for reading/writing (GetHostPointerForRead() /--- GetHostPointerForWrite()). Expressions like: A.flat[indices_array] = 0  are currently not supported. (If you require it probably a helper function flatIndices() would be the best option. It converts incoming flat indices into sequential indices for the array.)

Matlab® incompatibilities

There are no known incompatibilities. However, ILNumerics arrays utilize arbitrary storage schemes. Keep this in mind when working directly with the memory used for storing arrays elements.