karczma at info.unicaen.fr karczma at info.unicaen.fr
Wed May 11 16:17:12 EDT 2005

```Tim Rowe writes:

> On 5/11/05, Jerzy Karczmarczuk <karczma at info.unicaen.fr> wrote:
>
>> Give me one single language where [3-d arrays are] natural and immediate.
>
> I don't know how Matlab does it, but I find the C++ standard library
> vector<vector<vector<float> > >
> entirely intuitive (apart, perhaps, for the need for those two spaces)!

Let's precise what I consider to be important in order to call it natural
and immediate. And, in general, useful.

1. The definition of a concrete object, not just its type, but, say,
the initialization with constants. Or/and, global initialization with
zeros.

2. Easy synthesis of multi-dim matrices out of "planes", of submatrices
of lesser dimensions;
it can be an 'overlay', like, say, making  a colour image out of three
R/G/B planes, or making a 3D surfaces, or aking tensors through
external products.

3. Easy indexing, and not only A[i][j][k], etc., but slicing, the extraction
of sub-dimensional matrices, e.g., one column vector out of a 2D matrix
in Matlab:  A(3,:). Also, extracting parts (e.g. sub-images).

Also, in mathematical context, "intelligent" indexing, e.g. treating
a matrix as implicitly anti-symmetric. Here the CAS systems as Maple
or Mathematica provide the adequate tools. C++ of course doesn't,

4. Readable iterators, perhaps something more compact than insipid do-loops.

5. If those matrices are used as mathematical objects: tensors, etc.,
I want to have some simple notation for inner multiplications/
contractions, etc. This is not just the syntax problem, but the
existence of good libraries as well...

6. Reshaping of those arrays. I thought that Matlab 'reshape' (or something
similar in Numeric Python) is a baroque, rarely used construction. Now
I use it quite often...

So, plenty of things. That's why this is not so trivial...

Jerzy Karczmarczuk

```