246 votes

Concaténation d'un tableau NumPy à un autre tableau NumPy

J'ai un numpy_array. Quelque chose comme [ a b c ] .

Et ensuite, je veux le concaténer avec un autre tableau NumPy (tout comme on crée une liste de listes). Comment créer un tableau NumPy contenant des tableaux NumPy ?

J'ai essayé de faire ce qui suit sans succès

>>> M = np.array([])
>>> M
array([], dtype=float64)
>>> M.append(a,axis=0)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'append'
>>> a
array([1, 2, 3])

3 votes

Vous pouvez créer un "tableau de tableaux" (vous utilisez un tableau d'objets), mais ce n'est certainement pas ce que vous voulez. Qu'est-ce que vous essayez de faire ? Voulez-vous simplement un tableau 2d ?

0 votes

Un tableau de tableaux est appelé un tableau imbriqué. Trois réponses dans ce fil de discussion concernent np.append() qui ne conserve pas la structure imbriquée. Ceci est dû à une question sans exemple clair.

292voto

endolith Points 4183
In [1]: import numpy as np

In [2]: a = np.array([[1, 2, 3], [4, 5, 6]])

In [3]: b = np.array([[9, 8, 7], [6, 5, 4]])

In [4]: np.concatenate((a, b))
Out[4]: 
array([[1, 2, 3],
       [4, 5, 6],
       [9, 8, 7],
       [6, 5, 4]])

ou ceci :

In [1]: a = np.array([1, 2, 3])

In [2]: b = np.array([4, 5, 6])

In [3]: np.vstack((a, b))
Out[3]: 
array([[1, 2, 3],
       [4, 5, 6]])

1 votes

Bonjour, lorsque j'exécute ce programme, j'obtiens ceci : np.concatenate((a,b),axis=1) Sortie : array([1, 2, 3, 2, 3, 4]) Mais ce que je cherche, c'est un tableau numpy 2d ?

3 votes

@Fraz : J'ai ajouté celui de Sven vstack() idée. Vous savez que vous pouvez créer le tableau avec array([[1,2,3],[2,3,4]]) n'est-ce pas ?

0 votes

Concatenate() est celle dont j'avais besoin.

95voto

Sven Marnach Points 133943

Le message d'erreur dit tout : Les tableaux NumPy n'ont pas de append() méthode. Il existe une fonction gratuite numpy.append() cependant :

numpy.append(M, a)

Cela va créer un nouveau tableau au lieu de muter M en place. Notez que l'utilisation de numpy.append() implique de copier les deux tableaux. Vous obtiendrez un code plus performant si vous utilisez des tableaux NumPy de taille fixe.

0 votes

Salut quand j'essaie ceci J'obtiens ceci >>> np.append(M,a) array([ 1., 2., 3.]) >>> np.append(M,b) array([ 2., 3., 4.]) >>> M array([], dtype=float64) J'espérais que M soit un tableau 2D ??

9 votes

@Fraz : Jetez un coup d'oeil à numpy.vstack() .

0 votes

Je pense que cela devrait être la réponse acceptée car elle répond précisément à la question.

39voto

Zhai Zhiwei Points 413

Vous pouvez utiliser numpy.append() ...

import numpy

B = numpy.array([3])
A = numpy.array([1, 2, 2])
B = numpy.append( B , A )

print B

> [3 1 2 2]

Cela ne créera pas deux tableaux distincts mais ajoutera deux tableaux dans un tableau à une seule dimension.

4 votes

On a demandé un tableau imbriqué, pas un tableau aplati.

10voto

Clay Coleman Points 19

J'ai trouvé ce lien alors que je cherchais quelque chose de légèrement différent, à savoir comment commencer à ajouter des objets de type tableau à un fichier de type vide numpy array, mais j'ai essayé toutes les solutions proposées sur cette page, sans succès.

Puis j'ai trouvé cette question et cette réponse : Comment ajouter une nouvelle ligne à un tableau numpy vide ?

L'essentiel ici :

La façon de "démarrer" le tableau que vous voulez est la suivante :

arr = np.empty((0,3), int)

Ensuite, vous pouvez utiliser concaténer pour ajouter des lignes comme ceci :

arr = np.concatenate( ( arr, [[x, y, z]] ) , axis=0)

Voir aussi https://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html

9voto

lukecampbell Points 1733

Sven a tout dit, il faut juste être très prudent à cause des ajustements automatiques de type lorsque append est appelé.

In [2]: import numpy as np

In [3]: a = np.array([1,2,3])

In [4]: b = np.array([1.,2.,3.])

In [5]: c = np.array(['a','b','c'])

In [6]: np.append(a,b)
Out[6]: array([ 1.,  2.,  3.,  1.,  2.,  3.])

In [7]: a.dtype
Out[7]: dtype('int64')

In [8]: np.append(a,c)
Out[8]: 
array(['1', '2', '3', 'a', 'b', 'c'], 
      dtype='|S1')

Comme vous pouvez le voir d'après le contenu, le type de données est passé de int64 à float32, puis à S1.

1 votes

Un tableau imbriqué a été demandé.

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