[Home] [Download] [Tutorial] [API Documentation] Other Documentation [References]

RTensor Documentation

Introduction

The RTensor library (rtensor.so and rtensor_sup.rb) provides the tensor (multi-dimensional matrix) functionality for the Ruby programming language. It is built for Windows only (and only 32-bit Windows XP and Vista have been tested) with RubyInstaller 1.9.2-p290 and DevKit-tdm-32-4.5.2-20110712-1620-sfx.exe.

Currently Ruby has Matrix as part of its Standard Library. The more powerful matrix-related computations are available as part of Ruby/GSL. However, the multi-dimensional matrix is available as part of NArray. Therefore, the current effort is to provide, at least, an example on how to unify the (multi-dimensional) matrix-related computational power in Ruby. There are methods "to_matrix", "to_gsl" and "to_narray", and similarly "from_matrix", "from_gsl" and "from_narray". Furthermore, Gnuplot can be used to provide some graphical capabilities and GiNaC can be used for certain symbolic computations.

Although the library is still in development, the following improvements are brought about by RTensor with respect to the existing ones (as can also be seen in Comparison Table):

  • Ruby Matrix: multi-dimensional capability
  • Ruby/GSL: multi-dimensional capability
  • NArray: more types, indexing from 0 or 1, row order or column order, sparseness, symbolic
  • Matlab or Octave: more types, negative indices, indexing from 0 or 1, row order or column order, and especially the power of Ruby!
  • (There is also a Ruby interface to Octave: octave-ruby; but its matrix doesn't seem to support Ruby objects.)

    This Ruby project was started on Sep 20, 2011, whereas the underlying C++ project was started on Aug 18, 2011. The original dream was to provide Matlab/Octave functionality into Ruby, but then the dream has changed to having Ruby's version of Sage, and to certain extent, SimPy. After I wake up, I think I'll just provide some Ruby interface to Sage.

    Terminology

    The followings are used in considering the naming convention (such as "size" and "shape"), in the order of precedence:

  • Ruby Array - Ruby Core
  • Ruby Matrix - Ruby Standard Library
  • Matlab or Octave - multi-dimensional matrix
  • GSL and Ruby/GSL - matrix
  • NArray - multi-dimensional matrix
  • Gnuplot - graphics
  • GiNaC - symbolic
  • The lowercase "tensor" term is used to represent multi-dimensional matrix. The uppercase "Tensor" and "Tnsr" are used to represent the particular classes in RTensor library, and both can be referred as "tensor" and sometimes abbreviated as "tsr".

    In RTensor library, the number of dimensions of a tensor is at least two. Therefore, a "matrix" is a tensor that has dimensions m X n, a "vector" is a tensor that has dimensions m X 1 (column vector) or 1 X n (row vector), a "scalar" is a tensor that has dimensions 1 X 1 (but hardly used), and an "empty tensor" is a tensor that has dimensions 0 X 0. Note that an "array" has only one dimension k.

    Because the number of dimensions of a tensor is at least two, the indexing of tensor elements is done through "multi-index" [idx1, idx2, idx3, ...]. However, it is also possible to use "single index" [idx]; in this case the tensor is considered as one long array.

    Comparison Table

    Features Ruby Matrix Ruby/GSL Matrix NArray Matlab/Octave RTensor Notes
    Dimensions 2D 2D Multi-D Multi-D Multi-D ---
    Indexing Always 2D 1D or 2D Multi-D Multi-D Multi-D ---
    Start Index 0 0 0 1 1 or 0 (or any natural number) ---
    Negative Index Yes Yes Yes No Yes ---
    Types of Indexing integers only integers, submatrices integers, ranges, masks, indirects integers, ranges, masks, indirects integers, ranges, masks, indirects RTensor is based on C++.
    Ordering Use Ruby Array Row Order Row Order Column Order Column Order or Row Order GSL uses row order.
    Immutable? Yes No No No No ---
    Vector separate from Matrix? Yes Yes Yes No No ---
    Sparseness No No No Yes Yes ---
    Symbolic No No No Yes Planned ---
    Types Ruby object int, double, cdouble Ruby object, uchar, short, int, float, double, cfloat, cdouble string, bool, char, uchar, short, ushort, int, unsigned, long, ulong, llong, ullong, float, double, cchar, cuchar, cshort, cushort, cint, cunsigned, clong, culong, cllong, cullong, cfloat, cdouble Ruby object, string, bool, char, uchar, short, ushort, int, unsigned, long, llong, ullong, float, double, ldouble, cchar, cuchar, cshort, cushort, cint, cunsigned, clong, culong, cllong, cullong, cfloat, cdouble, cldouble ---

    ISearchBible.com Bible Verses


    Your Ad Here