J'ai quelques listes: qui sont de longueur variable. p> Je veux retourner un vecteur de longueur cinq, telle que si la longueur de la liste d'entrée est <5 alors il sera rembourré avec des zéros à droite, et s'il est> 5, il sera tronqué sur le 5ème élément. P> Par exemple, entrée Je me sens comme si je devrais pouvoir utiliser A code> retournerait np.array ([1,2,3,0,0]) code> et entrée b code> retournerait np.array ([1,2, 3,4,5]) code>. P> np.pad code> , mais je n'arrive pas à suivre la documentation. p> p>
3 Réponses :
Ceci pourrait être lent ou rapide, je ne suis pas sûr, mais cela fonctionne à votre objectif.
In [22]: pad = lambda a,i : a[0:i] if len(a) > i else a + [0] * (i-len(a)) In [23]: pad([1,2,3], 5) Out[23]: [1, 2, 3, 0, 0] In [24]: pad([1,2,3,4,5,6,7], 5) Out[24]: [1, 2, 3, 4, 5]
Pour une version numpy: pad = lambda a, i: a [0: I] si A.Shape [0]> iore np.hstack ((A, nzzzeros (i - A. 0] ))))) code>
version python périque, où fonction à l'aide de numpy: p> a code> est une liste Python (pas un tableau NUMPY): a [: N] + [0,] * (n-len (a)) < /code >.dec.p>Pour exemple: p>
J'aime le est une version qui n'utilise pas mais par elle-même, elle ne tronque pas. Il reste quelque chose comme Voici ma variation sur d'une manière ou d'une manière ou d'une autre que les solutions NUMPLY CODE> NUMPY CODE> font la même chose - construisez un tableau vierge de la forme souhaitée , puis remplissez-le avec les valeurs pertinentes de l'original. p> un autre détail - lorsque la solution pourrait, en théorie, renvoyer une vue au lieu d'une copie. Mais cela nécessite une manipulation de ce cas séparément d'un étui de pad. P> Si la sortie souhaitée est une liste des éventuelles tableaux lents égaux, cela peut valoir la peine de les collecter dans un tableau 2D. P> np.pad code> est surchargé, mieux pour ajouter une bordure autour d'une image 2D que d'ajouter des zéros à une liste. zip_longest code>, surtout Si les entrées sont des listes et que vous n'avez pas besoin d'être des matrices. C'est probablement le plus proche que vous trouverez à un code qui fonctionne sur toutes les listes à la fois en code compilé). P> np. Array code> du tout (sauvegarde de la hausse du tableau) p> [x [: 5] pour x in (a, b)]] code>. P> all_m code> S, fonctionnant Avec une liste simple ou une matrice 1D: p>
Pour utiliser np.pad, np.pad (x, ((0,5-len (x))), mode = 'constante', constante_values = 0) est une matrice ([1, 2, 3, 0, 0]) Pour x = np.array ([1,2,3]), mais cela ne fonctionnera pas pour Len (x)> 5 donc dans ce cas, il suffit de trancher la matrice, par exemple si y = np.array ([1, 2,3,4,5,6]) puis y [: 5] = tableau ([1, 2, 3, 4, 5])