web-dev-qa-db-fra.com

Convertir un tableau 1D en tableau 2D avec numpy

Je veux convertir un tableau à 1 dimension en un tableau à 2 dimensions en spécifiant le nombre de colonnes dans le tableau 2D. Quelque chose qui fonctionnerait comme ceci:

> import numpy as np
> A = np.array([1,2,3,4,5,6])
> B = vec2matrix(A,ncol=2)
> B
array([[1, 2],
       [3, 4],
       [5, 6]])

Est-ce que numpy a une fonction qui fonctionne comme ma fonction "vec2matrix"? (Je comprends que vous pouvez indexer un tableau 1D comme un tableau 2D, mais ce n'est pas une option dans le code que j'ai - je dois faire cette conversion.)

86
Alex Williams

Vous voulez reshape le tableau.

B = np.reshape(A, (-1, 2))
124
Matt Ball

Vous avez deux options:

  • Si vous ne souhaitez plus utiliser la forme d'origine, le plus simple consiste simplement à attribuer une nouvelle forme au tableau.

    a.shape = (a.size//ncols, ncols)
    

    Vous pouvez changer le a.size//ncols de -1 pour calculer automatiquement la forme appropriée. Assurez-vous que a.shape[0]*a.shape[1]=a.size, sinon vous rencontrerez un problème.

  • Vous pouvez obtenir un nouveau tableau avec la fonction np.reshape, qui fonctionne généralement comme la version présentée ci-dessus.

    new = np.reshape(a, (-1, ncols))
    

    Lorsque cela est possible, new sera simplement une vue du tableau initial a, ce qui signifie que les données sont partagées. Dans certains cas, cependant, le tableau new sera converti en copie. Notez que np.reshape accepte également un mot-clé facultatif order qui vous permet de passer de l'ordre C aux lignes principales à l'ordre Fortran aux colonnes. np.reshape est la version de fonction de la méthode a.reshape.

Si vous ne pouvez pas respecter l'exigence a.shape[0]*a.shape[1]=a.size, vous êtes obligé de créer un nouveau tableau. Vous pouvez utiliser la fonction np.resize et la mélanger avec np.reshape, telle que

>>> a =np.arange(9)
>>> np.resize(a, 10).reshape(5,2)
38
Pierre GM

Essayez quelque chose comme:

B = np.reshape(A,(-1,ncols))

Vous devrez toutefois vous assurer de pouvoir diviser le nombre d'éléments de votre tableau par ncols. Vous pouvez également jouer avec l'ordre dans lequel les nombres sont entrés dans B à l'aide du mot clé order.

5
JoshAdel