matrix redimensionne un tableau, à nombre et ordre inchangés des éléments

## Syntaxe

                y = matrix(v, m, n)
                y = matrix(v, m1, m2, m3, ..)
                y = matrix(v, [sizes])

## Paramètres

v

  Tout type de conteneur matriciel (matrice homogène de tous types de données ; tableau de cellules ; tableau de structures), à nombre quelconque de dimensions (vecteur, matrice, hypertableau N-dimensionnel), de toutes tailles.

n, m, m1, m2, ..

  entiers positifs : nouvelles tailles attendues après redimensionnement. Une des tailles peut être fixée à `-1`.

sizes

  vecteur d'entiers positifs : nouvelles tailles à fixer.

y

  tableau redimensionné, avec `y(i)==v(i)` et `size(y,"*")==size(v,"*")`.

## Description

Pour un tableau ou un hypertableau `v` à `n` x `m` éléments principaux, `y = matrix(v, n, m)` ou `y = matrix(v, [n,m])` redimensionne `v` en une matrice ou un tableau 2D de taille `n` x `m`, par indice linéarisé croissant des éléments de `v`.

De même, pour un tableau ou un hypertableau `v` à `m1` x `m2` x `m3 ..` éléments principaux, `y = matrix(v, m1, m2, m3,..)` ou `y = matrix(v, [m1 m2 m3..])` redimensionne `v` en une hypermatrice ou un hypertableau à `m1` lignes, `m2` colonnes, `m3 ..` pages, ...etc.

Dans tous les cas, l'ordre linéaire des éléments dans `y` est le même que celui dans `v` : pour tout `1 <= i <= size(v,"*")`, `y(i) = v(i)`.

Si une seule des tailles `n` ou `n` ou `m1` etc.. est fixée à -1, sa valeur effective est automatiquement fixée telle que le nombre total des éléments du tableau est inchangé.

- `y = v(:)` est équivalent à `matrix(v,-1, 1)`
- `L'usage de matrix()` peut être étendu à tout type de mlist(), en définissant une function `%<type>_matrix(v,s,..)` prenant au moins 2 paramètres d'entrée.

## Exemples

Avec une matrice numérique :

    a = [1 3 5 7 9 11; 2 4 6 8 10 12]
    matrix(a, 4, 3)
    matrix(a, [3 4])
    matrix(a, 3, -1)
    // into an hypermatrix:
    matrix(a, 3, 2, 2)

Avec une matrice de caractères :

    t = strsplit("a":"x",1:23)'
    matrix(t,[3,8])

    --> t = strsplit("a":"x",1:23)'
     t  =
    !a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  !

    --> matrix(t,[3,8])
     ans  =
    !a  d  g  j  m  p  s  v  !
    !b  e  h  k  n  q  t  w  !
    !c  f  i  l  o  r  u  x  !

Avec un hypertableau de cellules :

    c = makecell([2,3,2], %t,%z, %i,"abc", list(%pi,"a"), int8(23),cos,sind,"àèìòù",corelib, 0.5, 1/%z^2)
    rc = matrix(c, 3, 4)
    rc(8)==c(8)
    rc{8}.getshell

     c  =
    (:,:,1)
      [1x1 boolean]  [1x1 polynomial]  [1x1 constant]
      [1x1 string ]  [    list      ]  [1x1 int8    ]
    (:,:,2)
      [      1 fptr   ]  [      1 function]  [1x1 string]
      [        library]  [    1x1 constant]  [    r     ]

    --> rc = matrix(c, 3, 4)
     rc  =
      [1x1 boolean   ]  [    list    ]  [      1 fptr    ]  [1x1 constant]
      [1x1 string    ]  [1x1 constant]  [        library ]  [1x1 string  ]
      [1x1 polynomial]  [1x1 int8    ]  [      1 function]  [    r       ]

    --> rc(8)==c(8)
     ans  =
      T

    --> rc{8}.getshell
     ans  =
     cmd

Avec un tableau de structures :

    clear s
    s(3,6).r = %pi
    matrix(s,2,9)

    --> s(3,6).r = %pi
     s  =
      3x6 struct array with fields:
        r

    --> matrix(s,2,9)
     ans  =
      2x9 struct array with fields:
        r

## Voir aussi

- colon (:)
- resize_matrix
- ndims
- size
- extraction
- transposition
- brackets [..]
- matrices
- hypermatrices
- makecell
- struct
- mlist