resize_matrix élague et/ou étend (et convertit) une matrice ou une hypermatrice

## Syntaxe

                         resize_matrix    //  Démo
                resMat = resize_matrix(mat, nbRows, nbCols)

                resMat = resize_matrix(mat, nbRows, nbCols, resType)
                resMat = resize_matrix(mat, nbRows, nbCols, resType, padding)
                resMat = resize_matrix(mat, nbRows, nbCols,    ""  , padding)

                resMat = resize_matrix(mat, newSizes)
                resMat = resize_matrix(mat, newSizes, resType)
                resMat = resize_matrix(mat, newSizes, resType, padding)
                resMat = resize_matrix(mat, newSizes,    ""  , padding)

## Paramètres

mat

  Matrice à retailler, de type booléens, entiers encodés, décimaux (réels ou complexes), polynômes, ou texte

nbRows

  nouveau nombre de lignes de la matrice retaillée. Les lignes en trop sont supprimées. Les lignes manquantes sont créées. Spécifier `nbRows < 0` pour conserver le nombre de lignes courant.

nbCols

  nouveau nombre de colonnes de la matrice retaillée. Les colonnes en trop sont supprimées. Les colonnes manquantes sont créées. Spécifier `nbCols < 0` pour conserver le nombre de colonnes courant.

newSizes

  vecteur spécifiant les nouvelles tailles de `mat` selon ses différentes dimensions. Pour conserver une taille à la taille actuelle, indiquer -1.

  S'il est plus court que `size(mat)`, il est complété avec des 1. Exemple: si `mat` telle que `size(mat)==[ 4 3 3 2]` est fournie, et `newSizes=[6 2]` est spécifié, `newSizes = [6 2 1 1]` sera utilisé.

  Si `newSizes` est plus long que `size(mat)` avec `newSizes($)>1`, une ou plusieurs dimensions sont ajoutées à `mat`. Exemple: si `mat` telle que `size(mat)==[ 4 3 ]` est fournie avec `newSizes=[6 2 2]`, le résultat sera une hypermatrice de 2 pages, la seconde étant complètement initialisée.

  `newSizes = [nbRows, nbCols]` peut être utilisé pour une matrice.

resType

  option indiquant le type en lequel la matrice/hypermatrice retaillée doit être convertie. resType peut être "boolean", "constant", "string", "int8", "uint8", "int16", "uint16", "int32", "uint32", "int64", ou "uint64".

  Aucune conversion n'est admise pour une matrice ou hypermatrice de polynômes, ni pour une hypermatrice de texte.

padding

  option de même type que `mat`, spécifiant le contenu scalaire à affecter aux éléments ajoutés à `mat` lorsque sa taille selon une dimension est augmentée. La valeur utilisée par défaut est `0` (réels, complexes, entiers encodés, polynômes), ou `""` (texte), ou `%F` (booléens).

  Lorsque les types de `mat` et `padding` sont distincts, Scilab tente de convertir le type de `padding`.

  Pour les polynômes, le nom de l'inconnue du polynôme `padding` est forcé à celui de `mat`.

resMat

  matrice ou hypermatrice retaillée (et convertie)

## Description

Crée une matrice de taille `[nbRows, nbCols]` ou `newSizes`, ou une hypermatrice de taille `newSizes`. Si, pour une certaine dimension, la nouvelle taille est plus petite que l'initiale, la matrice est élaguée. Si la taille est agrandie, alors de nouveaux éléments valant `padding` sont ajoutés à la matrice/hypermatrice. Le nombre de dimensions peut être augmenté.

Le type du résultat peut être modifié en spécifiant l'argument `resType`, avec les restrictions mentionnées ci-dessus.

## Exemples

    // Exemples de démonstration, dont avec des polynômes :
    //resize_matrix

    // Retaillage d'une matrice numérique
    M = grand(4, 3, "uin", -9, 9)
    resize_matrix(M, -1, 5)  //  Indiquer -1 pour conserver la taille courante
    resize_matrix(M, 2, -1)
    resize_matrix(M, 3, 4)

    --> M = grand(4, 3, "uin", -9, 9)
     M  =
      -8.  -5.  -2.
      -9.   0.  -1.
       4.  -1.   6.
       5.   1.   8.

    --> resize_matrix(M, -1, 5)  //  Indiquer -1 pour conserver la taille courante
     ans  =
      -8.  -5.  -2.   0.   0.
      -9.   0.  -1.   0.   0.
       4.  -1.   6.   0.   0.
       5.   1.   8.   0.   0.

    --> resize_matrix(M, 2, -1)
     ans  =
      -8.  -5.  -2.
      -9.   0.  -1.

    --> resize_matrix(M, 3, 4)
     ans  =
      -8.  -5.  -2.   0.
      -9.   0.  -1.   0.
       4.  -1.   6.   0.

    M = grand(4, 3, "uin", -9, 9)
    resize_matrix(M, [3 4 2])
    resize_matrix(M, [3 4 2], "", %i)
    resize_matrix(M, [3 4 2], "string", %i)

    // Matrice de texte
    myMatString = ["Scilab", "the" ; "Open Source", "Scientific" ; "Software", "Package"]
    resize_matrix( myMatString, 5, 3 )
    // Equivalent syntax for new sizes:
    resize_matrix( myMatString, [5 3], "", "$" ) // Contenu d'extension à façon

    // Elagage, extension et conversion d'une hypermatrice donnée
    h = rand(2, 3, 2)*200
    resize_matrix(h, [3 2 3], "int8")
    resize_matrix(h, [3 2 3], "int8", -1)   // Extension avec des -1 et conversion en int8
    r = resize_matrix(h, [3 2 ] ,"" , -1)   // Extension à façon, sans conversion
    size(r)  // La dernière dimension réduite à un singleton a automatiquement été simplifiée

    // Matrice de polynômes
    x = poly(0, "x");
    P = (1-x)^grand(4, 2, "uin", 0, 3)
    resize_matrix(P, 3, 3)
    resize_matrix(P, [3 3 2])
    resize_matrix(P, [3 3 2], "", %z)
    //  => L'inconnue de %z est forcée à celle de P => x
    //  => La matrice de polynômes résultante n'est pas convertible

## Voir aussi

- matrix
- size
- typeof
- double
- strtod
- string

## Historique

5.5.0

- Les polynômes et les hypermatrices sont désormais acceptés.
- La valeur affectée aux éléments d'extension peut être spécifiée.
- Les nouvelles tailles peuvent être spécifiées dans un vecteur.
- resize_matrix() appelée sans paramètres affiche des exemples de démonstration.

6.0.1 L'option `resType` est étendue aux nouveaux types entiers `int64` et `uint64`.