The newmat library is for the manipulation of matrices, including the standard operations such as multiplication as understood by numerical analysts, engineers and mathematicians.
A matrix is a two dimensional array of numbers. However, very special operations such as matrix multiplication are defined specifically for matrices. This means that a matrix library, as I understand the term, is different from a general array library.
I see a matrix package as providing the following
1. Evaluation of matrix expressions in a form familiar to
scientists and engineers. For example A = B * (C + D.t());.
In particular * means matrix multiply.
2. Access to the elements of a matrix;
3. Access to submatrices;
4. Common elementary matrix functions such as determinant and
trace;
5. A platform for developing advanced matrix functions such as
eigen-value analysis;
6. Good efficiency and storage management;
7. Graceful exit from errors.
It may also provide
8. A variety of types of elements (eg real and complex);
9. A variety of types of matrices (eg rectangular and
symmetric).
In contrast an array package should provide
1'. Arrays can be copied with a single instruction; may have
some arithmetic operations for elementwise combination of arrays,
say +, -, *, /, it may provide matrix
multiplication as a function;
2'. High speed access to elements directly and perhaps with iterators;
3'. Access to subarrays and rows (and columns?);
6'. Good efficiency and storage management;
7'. Graceful exit from errors;
8'. A wide variety of types of elements (eg int, float, double, string etc);
9'. One, two and three dimensional arrays, at least, with
starting points of the indices set by user.
It may be possible to amalgamate these two sets of requirements to some extent. However newmat is definitely oriented towards the first set.