169 votes

Convertir un tableau 1D en un tableau 2D dans numpy

Je veux convertir un tableau unidimensionnel en un tableau bidimensionnel 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 inventée "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).

247voto

Matt Ball Points 165937

Vous voulez reshape le tableau.

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

-1 déduit la taille de la nouvelle dimension à partir de la taille du tableau d'entrée.

53voto

Pierre GM Points 7792

Vous avez deux options :

  • Si vous ne voulez plus de la forme originale, le plus simple est d'assigner une nouvelle forme au tableau.

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

    Vous pouvez commuter le a.size//ncols par -1 pour calculer automatiquement la forme appropriée. Veillez à ce que a.shape[0]*a.shape[1]=a.size sinon vous allez rencontrer des problèmes.

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

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

    Quand c'est possible, new ne sera qu'une vue du tableau initial a ce qui signifie que les données sont partagées. Dans certains cas, cependant, new sera une copie à la place. Notez que np.reshape accepte également un mot-clé facultatif order qui vous permet de passer de l'ordre C en ligne à l'ordre Fortran en colonne. np.reshape est la version fonctionnelle de la a.reshape méthode.

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 comme

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

13voto

JoshAdel Points 15911

Essayez quelque chose comme :

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

Vous devrez vous assurer que vous pouvez diviser le nombre d'éléments de votre tableau par ncols cependant. Vous pouvez également jouer avec l'ordre dans lequel les numéros sont tirés dans B en utilisant le order mot-clé.

10voto

Arun Points 367

Si votre seul but est de convertir un tableau X 1d en un tableau 2d, faites-le :

X = np.reshape(X,(1, X.size))

5voto

Dhiraj kumar Points 51

Convertir un tableau à 1 dimension en un tableau à 2 dimensions en ajoutant de nouveaux axes.

a=np.array([10,20,30,40,50,60])

b=a[:,np.newaxis]--it will convert it to two dimension.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X