0.0.1 / 20120410¶ ↑

1 major enhancement

Initial alpha release

0.0.2 / 20120921¶ ↑

15 major enhancements

Second alpha release

Rewrote NMatrix in C++0x and C++11 using templates, namespaces; removed Ruby generators and CAST parser

Added preliminary C API

Slicing and referencing support for dense and list matrices (by @flipback)

BLAS level3 xTRSM algorithm added for rationals and BLAS types

LAPACK support added, including partially working xGETRF subroutine

Elementwise comparisons now return bytematrices

Elementwise operations on list matrices may alter the default value of the return matrix

Elementwise division behaves like Ruby division

Improved MATLAB .MAT v5 file reading

clang support

`==` operator now used for matrix equality, `=~` and `!~` for elementwise comparisons

Dense `each` returns an Enumerator when called without a block

Sped up list storage item deletion, fixed bugs

List matrixtohash conversion with `to_h`


Note: Elementwise list operations current disabled
0.0.3 / 20130118¶ ↑

8 major enhancements

Matrixscalar operations (dense, list)

Shortcuts for matrix creation (by @agarie)

Access to most ATLASimplemented LAPACK functions for those with ATLAS' CLAPACK interface: xGETRF, xGETRI, xGETRS, xGESV, xPOTRF, xPOTRI, xPOTRS, xPOSV, xLASWP, xSCAL, xLAUUM

Access to additional ATLASimplemented BLAS functions: xTRMM, xSYRK, xHERK, xROT, xROTG

NonATLAS versions of CLAPACK functions: xLASWP, xSCAL, xLAUUM, xROT

Matrix inversion (LU and Cholesky; requires CLAPACK)

LU factoring with and without CLAPACK

Native matrix I/O for dense (supporting upper, lower, hermitian, skew, symmetric, and general) and yale (general only); excludes Ruby objects currently


2 bug fixes:

Yaletolist casting

Now requires packable1.3.5 or higher, fixing a problem with MATLAB .mat v5 file I/O (specific to doubles)

0.0.4 / 20130517¶ ↑

3 major enhancements

Added a more userfriendly interface for cblas_rot in the form of NMatrix::BLAS.rot

Added to_hash for Yale matrices

Improved source code documentation (by @agarie)


4 minor enhancements

Spec cleanup (by @masaomi)

Made it possible to request a different itype internally for Yale matrices

Improved space usage of Yale slicebycopying, which was requesting more space than needed

Improved compiletime Mac OS X and Ubuntu library searching


8 bug fixes:

NMatrix::BLAS.gemv segfaults

Fixed Yale matrix slicebycopy write error where default itypes (which are based on shape) differ, and a separate problem where incorrect IJA and A entries were written.

NVectorscalar operations and NVectorNVector elementwise options now return an NVector instead of an NMatrix

Addressed problems with segmentation faults during iteration (by @cjfuller)

Addressed Ubuntu/Debian installation problems (incompatibility with aptsupplied atlas)

Fixed transpose behavior following slicebyreference (by @cjfuller)

Fixed gem install command in Rakefile (by @jpmckinney)

Fixed Spanish language compile issue (by @imcsk8 and @agarie)

0.0.5 / 20130709¶ ↑

4 major enhancements

NVector orientation is now controlled by its shape, not by the @orientation property

NVector default orientation is now a row vector rather than a column, as this is more efficient for Yale storage

NVector objects may now be created with dtypes other than dense

Exposure of additional ATLASimplemented BLAS functions, including native rational and Ruby object support, for xANUM (sum of the absolute values of a vector) and xNRM2 (2norm of a vector); and Ruby helper functions BLAS::anum and BLAS::nrm2 which should do more careful argument sanity checking


9 minor enhancements

Added yale_vector_insert to NMatrix::YaleFunctions, to speed up insertion of multiple items into a Yale matrix

Added yale_nd_row, yale_nd_row_as_hash, yale_nd_row_as_array, yale_nd_row_as_set, yale_nd_row_as_sorted_set, yale_row, yale_row_as_hash, yale_row_as_array, yale_row_as_set, yale_row_as_sorted_set, yale_nd_row_size to NMatrix::YaleFunctions in order to speed up getting multiple items from some row of a Yale matrix

Improved yale_ija, yale_a, yale_d by allowing an optional index argument, which returns a single array value instead of copying and returning the entire array

Improved sorting algorithm for Yale matrix multiplication; instead of selection sort, now uses quicksort; and subs in insertion sort for small partitions

Slicing a single row or column now returns an NVector instead of an NMatrix (does not yet work for ndimensional matrices)

Improved function documentation for NVector and NMatrix

Added min, max, to_a, shuffle, shuffle!, absolute_sum, norm2 functions to NVector

Aliased missing dimension of NVector#each_stored_with_indices to each_stored_with_index, which only yields a value and i or j (not both i and j) depending on the vector orientation

Added each_row, each_column to NMatrix


5 bug fixes:

Dense iterators now return self (an NMatrix) in order to be consistent with Ruby Array behavior (by @cjfuller)

Fixed Yale resize problem (by @v0dro)

Fixed Yale nx1 times 1xn multiplication problem

Fixed Yale sortingfollowingmultiplication problem

NMatrix.read now raises an exception when asked to read a file that does not exist

0.0.6 / 20130809¶ ↑

8 major enhancements:

Refactored iteration, so that each storage type now has each of: each, each_with_indices, each_stored_with_indices

Added elementwise power function (**) for dense matrices (by @agarie)

Dramatically improved matrix elementwise and scalar functions so C++ templates are no longer necessary; elementwise operations may now be written in protected Ruby methods that look like NMatrix#list_elementwise_op and NMatrix#list_scalar_op

Elementwise and scalar operations that might return a true or false now return Ruby matrices

Yale elementwise and scalar operations have been added

Yale is now allowed to have a nonzero default (specifically to permit truefalse matrices and nil sparse bases)

Dramatically improved NMatrix#cast to allow for hashed options including a :default for list and yale casts

Dramatically improved speed of compilation


14 minor enhancements:

Improved documentation for exposed BLAS and LAPACK functions

Allowed for use of BLAS::rot without cloning x and y (inplace plane rotation); removed unnecessary test of unfriendly version

Added more userfriendly cblas_xrotg implementation: BLAS::rotg

Moved NMatrix::YaleFunctions::yale_vector_insert to NMatrix#yale_vector_set, which is more consistent with behavior

Changed notations for protected stypespecific functions, which now look like stype_method_name, e.g., yale_vector_set

Added NMatrix#list_default_value protected function to get the initial (sparse) value for list matrices

Changed behavior and names of NMatrix::YaleFunctions methods which get column indices and cell contents by row, so that they now expect the :keys option (like Hash#keys) instead of :array, which doesn't make sense; name changes are as follows:
yale_row_as_sorted_set > yale_ja_d_keys_sorted_set_at yale_row_as_set > yale_ja_d_keys_set_at yale_row_as_array > yale_ja_d_keys_at yale_nd_row_as_sorted_set > yale_ja_sorted_set_at yale_nd_row_as_set > yale_ja_set_at yale_nd_row_as_array > yale_ja_at
Aliases are included but will be removed without notice.

Added NVector#sorted_indices and binned_sorted_indices for use when running knearest neighbor searches on a distance matrix

Added NVector::logspace shortcut function (analogous to NVector::linspace)

Cleaned up code by removing monkey patches that we stopped using circa v0.0.2 (Array#min, Array#max, String#constantize, String#camelize, String#underscore)

Reenabled elementwise mod (%) method

Added NMatrix.guess_dtype class method, which allows you to figure out what dtype (roughly) should be used for any given Ruby value (e.g., 3)

String and nil objects in NMatrix cells are no longer outlawed (but are not supported), provided they are of the :object dtype

NMatrix#diag shortcut for specifying sparse matrix with a user specified diagonal array (by @ryanmt)


3 bug fixes:

Corrected BLAS::rot bounds checking on optional n argument

Removed BLAS::rotg and BLAS::nrm2 code for rational numbers, as both involve a square root

Repaired list matrix elementwise functions

0.0.7 / 20130822¶ ↑

6 major enhancements:

Eliminated NVector in favor of NMatrix objects with effective_dim smaller than dim; added NVectorlike functionality to NMatrix, sometimes with respond_to? dependent upon matrix dimensions; allowed for NVector.new to continue to function as before, but now returns an NMatrix instead

Began major refactoring of headers for math.cpp

Added two singular value decomposition functions for dense NMatrix objects, gesvd and gesdd, for floating point and complex dtypes

Added additional slicing shorthand, which uses hashes (e.g., n), which may eventually allow users to use n notation instead (needs Ruby core patch)

[] and []= calls no longer need index on those matrix shape elements which are equal to 1 (e.g., vectors)

Yale slicingbyreference has been added


18 minor enhancements:

Added userfriendly NMatrix::LAPACK.laswp method

Added NMatrix#abs to compute elementwise absolute values, and abs_dtype to determine the dtype returned by a call to abs on a given matrix (needed for RSpec)

Added NMatrix#size to compute the total number of cells in an NMatrix object (solely accounting for the shape, not sparsity)

Added RSpec monkey patches for be_within to work with NMatrix objects; usable by requiring “nmatrix/rspec”

Added experimental NMatrix::LAPACK.lapack_gesvd function (which does NOT depend upon CLAPACK) (by @ryanmt and @mohawkjohn)

Added experimental nonLAPACKdependent function NMatrix::LAPACK.lapack_gesdd

Added NMatrix#supershape method for getting the shape of a slice's parent or other ancestor, which may be useful for calling ATLAS and LAPACK functions on slices

Aliased NMatrix[] to function like N[] shortcut for matrix creation (by @agarie)

Added layer for matrices with dimension greater than two (corresponds to row and column)

Added rank and each_rank generics for row/#column/#layer and each_row/#each_column/#each_layer respectively (#each_rank replaces each_along_dim)

Replaced reduce_along_dim with inject_rank

NMatrix#to_a now works for up to two dimensional matrices; and returns a flattened array for singlerow matrices

NMatrix#to_flat_a now returns a flattened array of all entries

Reorganized NMatrix Ruby sources into multiple files: math.rb for instance methods which are mathematical in nature or are essentially ATLAS/LAPACK/BLAS calls, enumerate.rb for methods involving enumeration; and existing shortcuts.rb for convenience functions and shortcut constructors, and nmatrix.rb for core functionality (#inspect, to_h, to_a, to_s, pretty_print, and so on)

Improved pretty_print, which now also prints layers (the third dimension in a 3D matrix)

Refactored some of dense slicing to remove some redundant code

Added shortcut functions list?, dense?, yale? for quickly testing matrix storage type


5 bug fixes:

Fixed compilation problem involving <typeinfo> and <vector> STL headers

Fixed NMatrix#inverse problem with nonsquare matrices

Fixed invalid read problem detected by Valgrind for Yale elementwise subtraction in spec

Fixed conversion from Ruby object to Complex and Rational

Fixed memory leak in slicing

0.0.8 / 20130823¶ ↑

2 bug fixes:

Fixed Ubuntu compilation bug caused by math header file refactoring

Fixed pry version error which manifests on some systems but not others

0.0.9 / 20130918¶ ↑

5 major enhancements:

Refactored NMatrix constructor

Improved usability of NMatrix shortcut constructor options (e.g., zeros, ones, random, etc.) using new NMatrix constructor

Leftassignment of slices for all matrix storage types (uses a dense cast, or accepts an array or single value)

Refactored Yale into a more objectoriented and less confusing set of header files

Enabled Travis CI (by @cjfuller)


4 minor enhancements:

Renamed some specs in order to change their test order, so that critical tests fail first (particularly in the case of segmentation faults)

Default dtype is now :object when no initial values are specified

Deprecated NVector#initialize and a number of other unnecessary NVector functionality

Made Ubuntu compilation significantly easier (by @cjfuller)


2 bug fixes:

nil values in matrices are now pretty printed as “nil”

Casting from dense to Yale now properly accepts the default value option

0.1.0.rc1 / 20131228¶ ↑

4 major enhancements:

Improved garbage collection strategy for partial object creation (i.e., when VALUEs are allocated but not registered right away), which in addition to fixing numerous bugs should prevent some new bugs from arising in the future (by @cjfuller)

Implemented list storage transpose

Implemented generic ndimensional transpose

Implemented == comparison between differing matrix stypes


9 minor enhancements:

Userfriendly gesvd and gesdd updates (by @ryanmt)

Added experimental yale_row_key_intersection function for expert recommendation problems

Added additional *indgen shortcuts and changed behavior for some; now, cindgen for :complex64, zindgen for :complex128, findgen for :float32, dindgen for :float64, rindgen for :rational128, and rbindgen for Ruby objects (which contain integers); also, removed code repetition

Changed stddev to use elementwise sqrt instead of a manual map block (by @cjfuller)

Added alias from MATLAB `load_mat` method to `load` for consistency with the MatrixMarket loader

Improved organization by moving list and yale code into storage/ subdirectories

Added NMatrix#potrf! and NMatrix#getrf, which are instance methods for calling CLAPACK functions (NMatrix#getrf! already existed)

Added GCC installation instructions for Mac OS X Mavericks, and updated the old installation instructions for Mac OS X (both found in scripts/)

Switched NMatrix::VERSION to work more like Rails::VERSION, with support for MAJOR, MINOR, TINY, and PRE

Added concat, hconcat, vconcat, and dconcat for joining matrices together


16 bug fixes:

Spec revisions for lapack_gesdd and lapack_gesvd (by @ryanmt)

Fixed two doublefree problems (by @cjfuller and @mohawkjohn)

Fixed contiguous array marking fencepost error

Fixed C/C++ API compatibility problem preventing rb/gsl linking

Resolved a number of compiler warnings, including one returntype problem that would likely have become a garbage collection error (if it wasn't already)

Fixed O3 optimization problems

Restored NMatrix#asum, nrm2, binned_sorted_indices, sorted_indices which were inadvertantly removed by NVector deprecation; have not tested

Experimental yale_nd_row and functions which call it now checks range of argument to prevent segfault

Fixed :* shortcut for a full list dimension (by @cjfuller)

Fixed list construction problem which occurred when an initial value array was provided (by @cjfuller)

Fixed inject issue with list and yale matrices of two dimensions (by @cjfuller)

Fixed several garbage collection problems (also listed under enhancements) (by @cjfuller)

Updated object cleaning target in extconf.rb

Fixed possible compilation problem on Mavericks with Xcode 5.02

Fixed errors involving undefined symbols, unresolved symbols, and lazy symbol binding

Improved LAPACK and BLAS header selection for Ubuntu/Debian systems with ATLAS (by @mvz)

0.1.0.rc2 / 20140312¶ ↑

No major enhancements.

14 minor enhancements:

Implemented negativeindex slicing (by @rajatkapoor)

Added reader for Point Cloud Library's PCD format

Added Ruby 2.1 support (including Travis CI testing)

Implemented LAPACKindependent exact inverse calculation for dense matrices of size 2x2 and 3x3, as well as

Added NMatrix::has_clapack? method to determine whether CLAPACK support has been compiled in

Improved conformance of specs to RSpec best practices (by @duggiefresh)

Travis CI now updates the IRC channel when a check passes (by @agarie)

Added NMatrix#data_pointer, which returns the memory address of the stored elements in a matrix (generally for use with FFI and other libraries that need pointers)

Made NMatrix#clone_structure a public method (was protected)

Added :scale option for NMatrix.random to handle nonfloating point forms

Added complex support to NMatrix.random

Aliased NMatrix.random to NMatrix.rand

Added NMatrix#reshape! for inplace reshape of dense matrices (by @rajatkapoor)

Implemented unary negation of matrices


6 bug fixes:

Fixed dot product operation on 1dimensional matrices (by @rve and @cjfuller)

Fixed segfault on 1dimensional matrix transpose (by @cjfuller)

Fixed compile error with Ruby 2.1 (by @diminish7)

Fixed regression which wasn't causing any problems but was counter to design: stride was declared prior to data storage for dense matrix storage

Fixed Rakefile problem which was causing specs to run twice in a row with each call to rake spec

NMatrix.random now raises an exception when rational matrices are requested

0.1.0.rc3 / 20140327¶ ↑

No major enhancements.

2 minor enhancements:

Exposed NMatrix::LAPACK.geev for LAPACK's xGEEV

Added outofplace complex conjugate for dense and yale storage (by @rve)


1 bug fixes:

Fixed critical bug with transposing a matrix reference slice (by @rajatkapoor)

0.1.0.rc4 / 20140724¶ ↑

No major enhancements.

1 minor enhancement:

NMatrix#floor and ceil implemented (by @v0dro)


2 bug fixes:

Disallowed outofbounds rank calls (by @andrewcsmith)

Fixed rspec 3.0 conflict with rspeclongrun 1.0.1

0.1.0.rc5 / 20140801¶ ↑

No major enhancements.

1 minor enhancements:

Added optional extension for generating homogeneous transformation matrices for rotations and translations in three dimensions


3 bug fixes:

Fixed rake install (by @duggiefresh)

Fixed API problems which prevented NMatrix from working with the SciRuby rbgsl fork

Fixed Yale inject behavior (by @yoongkang)

0.1.0 / 20141211¶ ↑

3 major enhancements:

Updated to BSD 3clause license

Removed Ruby 1.9.2 support; now requires Ruby 1.9.3 or higher (by @v0dro)

Added GaussJordan elimination for calculation of matrix inverses (by @v0dro)


6 minor enhancements:

Added trace method for square matrices

Improved Array#to_nm monkey patch so matrices and arrays can be interconverted easily, without need for a shape argument (by @andrewcsmith)

Added HarwellBoeing and Fortran matrix format parsers (by @v0dro)

Removed soontobedeprecated autoloads and replaced with a more robust method (by @duggiefresh)

Updated rake install task to use Bundler's GemHelper install task (by @duggiefresh)

Moved packable requirement from Gemfile to gemspec (by @andrewcsmith)


3 bug fixes:

Corrected Ubuntu clapack functionality checking, which should fix most functions which rely on the ATLAS version of clapack

Corrected NMatrix::gesdd workspace request size (by @yoongkang)

Fixed definition of NMatrix#asum for onebyone matrices (by @andrewcsmith)

0.2.0 / 20150824¶ ↑

2 major enhancements:

External libraries are now linked via optional plugins, removing ATLAS dependencies (by @wlevine)

Made it possible to use NMatrix together with NArray (by @blackwinter)


9 minor enhancements:

Removed rational types (by @wlevine)

Added blockdiagonal matrix generation method, NMatrix.block_diagonal (by @agisga)

Added Kronecker product method kron_prod (by @agisga)

Made permute_columns usage more intuitive (@agisga)

Added pow method to raise a matrix to an integer power (by @v0dro)

Added meshgrid method (by @dilcom)

Added hessenberg method, for reducing matrices to upper Hessenberg form (by @v0dro)

Added calculation of correlation matrix with corr and covariance using cov (by @v0dro)

Added method for returning matrix diagonal, diagonal (by @v0dro)


11 bug fixes:

Fixed #== operator problems (by @wlevine)

Fixed BLAS.gemv (by @wlevine)

Fixed asum for single element complex matrices (by @wlevine)

Fixed determinant calculation (by @wlevine)

Fixed division by zero (by @spacewander)

Fixed NMatrix#respond_to? so it would accept two arguments properly (by @ktns)

Fixed NMatrix#hermitian? (by @agisga)

Fixed gesdd, gesvd (by @wlevine)

Fixed symmetric? (by @ktns)

Made rdoc a development dependency to resolve dependency conflicts (by @mattliu)

Fixed bug where Array#to_nm would alter the array (by @andrewcsmith)
