[ANN] Multidimensional Array - MDArray (0.5.0)

MDArray

MDArray is a multi dimensional array implemented for JRuby inspired by
NumPy (www.numpy.org)
and Narray (narray.rubyforge.org) by Masahiro Tanaka. MDArray stands on
the shoulders of
Java-NetCDF and Parallel Colt.

NetCDF-Java Library is a Java interface to NetCDF files, as well as to
many
other types of
scientific data formats. It is developed and distributed by Unidata (
http://www.unidata.ucar.edu).

Parallel Colt
(sites.google.com/site/piotrwendykier/software/parallelcolt)
is a multithreaded
version of Colt (redirect...). Colt provides a
set
of Open Source
Libraries for High Performance Scientific and Technical Computing in
Java.
Scientific
and technical computing is characterized by demanding problem sizes and
a
need for high
performance at reasonably small memory footprint.

MDArray and SciRuby

MDArray subscribes fully to the SciRuby Manifesto (http://sciruby.com/).

"Ruby has for some time had no equivalent to the beautifully constructed
NumPy, SciPy,
and matplotlib libraries for Python.

We believe that the time for a Ruby science and visualization package
has
come. Sometimes
when a solution of sugar and water becomes super-saturated, from it
precipitates a pure,
delicious, and diabetes-inducing crystal of sweetness, induced by no
more
than the tap
of a finger. So is occurring now, we believe, with numeric and
visualization libraries for Ruby."

Main properties

  • Homogeneous multidimensional array, a table of elements (usually
    numbers), all of the
    same type, indexed by a tuple of positive integers;
  • Easy calculation for large numerical multi dimensional arrays;
  • Basic types are: boolean, byte, short, int, long, float, double,
    string, structure;
  • Based on JRuby, which allows importing Java libraries;
  • Operator: +,-,*,/,%,**, >, >=, etc.
  • Functions: abs, ceil, floor, truncate, is_zero, square, cube,
    fourth;
  • Binary Operators: &, |, ^, ~ (binary_ones_complement), <<, >>;
  • Ruby Math functions: acos, acosh, asin, asinh, atan, atan2, atanh,
    cbrt, cos, erf, exp,
    gamma, hypot, ldexp, log, log10, log2, sin, sinh, sqrt, tan, tanh,
    neg;
  • Boolean operations on boolean arrays: and, or, not;
  • Fast descriptive statistics from Parallel Colt (complete list found
    bellow);
  • Easy manipulation of arrays: reshape, reduce dimension, permute,
    section, slice, etc.
  • Reading of two dimensional arrays from CSV files (mainly for
    debugging
    and simple
    testing purposes);
  • StatList: a list that can grow/shrink and that can compute Parallel
    Colt descriptive
    statistics.

Descriptive statistics methods

auto_correlation, correlation, covariance, durbin_watson, frequencies,
geometric_mean,
harmonic_mean, kurtosis, lag1, max, mean, mean_deviation, median, min,
moment, moment3,
moment4, pooled_mean, pooled_variance, product, quantile,
quantile_inverse,
rank_interpolated, rms, sample_covariance, sample_kurtosis,
sample_kurtosis_standard_error, sample_skew, sample_skew_standard_error,
sample_standard_deviation, sample_variance, sample_weighted_variance,
skew,
split,
standard_deviation, standard_error, sum, sum_of_inversions,
sum_of_logarithms,
sum_of_powers, sum_of_power_deviations, sum_of_squares,
sum_of_squared_deviations,
trimmed_mean, variance, weighted_mean, weighted_rms, weighted_sums,
winsorized_mean.

Installation and download

  • Install Jruby
  • jruby -S gem install mdarray

Contributors

  • Contributors are welcome.

Homepages

HISTORY

  • 16/05/2013: Version 0.5.0: All loops transfered to Java with over
    50%
    performance
    improvement. Descriptive statistics from Parallel Colt.
  • 19/04/2013: Version 0.4.3: Fixes a simple (but fatal bug). No new
    features
  • 17/04/2013: Version 0.4.2: Adds simple statistics and boolean
    operators
  • 05/05/2013: Version 0.4.0: Initial release

Thanks, this is great progress towards permitting choice of using jruby

as opposed to constrained to python. i’m not in a position to be an
early
adopter but will follow this with keen interest.

2013/5/17 Rodrigo B. [email protected]

Stephen,

Thanks for the support.

Do you use NumPy. May I ask what your use case is?

Cheers,

Rodrigo