Did you know ... Search Documentation:
Pack arithmetic_types -- prolog/type_ndarray.pl
PublicShow source

This module implements arithmetic type (see module `arithmetic_types) ndarry, immutable, N-dimensional arrays largely patterned after Pyhon's NumPy library. Support from slicing and indexing (0 based) are imported from module type_list. A one dimensional array is represented a compound term with functor # and arguments being the elements of the array. N-dimensional arrays are supported by allowing arrays as array elements. The elements of the array can be any Prolog term, although a subset of the defined arithmetic functions on ndarray's only succeed if the elements are numbers. (There is one exception described below.)

The only exported predicate is the type checking ndarray/1. Also exported are a set of array arithmetic operations: `.+, .-, .*,` etc.; refer ot source for a complete list. The set of arithmetic functions defined by this module include:

:- arithmetic_function(new/2).        % new from shape, uninitialized
:- arithmetic_function(ndarray/1).    % new from ListOfLists
:- arithmetic_function(to_list/1).    % list from ndarray
:- arithmetic_function(ndim/1).       % number of dimensions
:- arithmetic_function(shape/1).      % shape (a list)
:- arithmetic_function(size/1).       % number of values
:- arithmetic_function([]/1).         % block indexing and slicing
:- arithmetic_function([]/2).
:- arithmetic_function(init/2).       % initialize any variables
:- arithmetic_function(\\ /2).        % row concat
:- arithmetic_function(flatten/1).    % flattened array
:- arithmetic_function(reshape/2).    % reshaped array
:- arithmetic_function(transpose/1).  % transpose array
% numeric functions
:- arithmetic_function(arange/2).     % new from range
:- arithmetic_function(arange/3).     % new from range
:- arithmetic_function(arange/4).     % new from range
:- arithmetic_function(identity/2).   % new NxN identity array
:- arithmetic_function(sum/1).        % sum of elements
:- arithmetic_function(min/1).        % minimum of elements
:- arithmetic_function(max/1).        % maximum of elements
:- arithmetic_function('.+'/2).       % numeric array addition
:- arithmetic_function('.-'/1).       % numeric array unary minus
:- arithmetic_function('.-'/2).       % numeric array subtraction
:- arithmetic_function('.*'/2).       % numeric array product
:- arithmetic_function('./'/2).       % numeric array division
:- arithmetic_function('.**'/2).      % numeric array power
:- arithmetic_function(apply/2).      % apply function/1 to array
:- arithmetic_function(cross/2).      % cross product of two 3D vectors
:- arithmetic_function(inner/2).      % inner product of two vectors
:- arithmetic_function(outer/2).      % outer product of two vectors
:- arithmetic_function(dot/2).        % dot product of two vectors/matrices
:- arithmetic_function(determinant/1).  % determinant of square matrix
:- arithmetic_function(inverse/1).    % inverse of square matrix

type_ndarray supports the use of constrained numeric values as defined by library(clpBNR) If current_module(clpBNR) succeeds (i.e., the module has been loaded), instantiation errors from standard functional arithmetic will be interpreted as numeric constraints on the variable(s) in the sub-expression being evaluated. If clpBNR is not accessible, the original instantiation error will be propagated.

See the ReadMe for this pack for more documentation and examples.

 ndarray(?X:array) is semidet
Succeeds if X is an array; otherwise fails.