8 votes

Comment ajouter des lignes et des colonnes à un tableau NUMPY ?

Bonjour, j'ai une série de 1000 données avec 1500 points dans chacune.

Ils forment un tableau Numpy de taille (1000x1500) créé à l'aide de np.zeros((1500, 1000)), puis rempli avec les données.

Mais que se passe-t-il si je veux que le tableau passe à 1600 x 1100 ? Dois-je ajouter des tableaux en utilisant hstack et vstack ou existe-t-il un meilleur moyen ?

Je voudrais que les données déjà présentes dans la partie 1000x1500 du tableau ne soient pas modifiées, que des données vides (zéros) soient ajoutées en bas et à droite, en gros.

Merci.

10voto

doug Points 29567

Cela devrait faire ce que vous voulez ( c'est-à-dire (en utilisant un tableau 3x3 et un tableau 4x4 pour représenter les deux tableaux dans le PO)

>>> import numpy as NP
>>> a = NP.random.randint(0, 10, 9).reshape(3, 3)
>>> a
>>> array([[1, 2, 2],
           [7, 0, 7],
           [0, 3, 0]])

>>> b = NP.zeros((4, 4))

cartographie a sur b :

>>> b[:3,:3] = a

>>> b
    array([[ 1.,  2.,  2.,  0.],
           [ 7.,  0.,  7.,  0.],
           [ 0.,  3.,  0.,  0.],
           [ 0.,  0.,  0.,  0.]])

3voto

EOL Points 24342

Si vous voulez des zéros dans les éléments ajoutés, my_array.resize((1600, 1000)) devrait fonctionner. Notez que cela diffère de numpy.resize(my_array, (1600, 1000)) dans lequel les lignes précédentes sont dupliquées, ce qui n'est probablement pas ce que vous voulez.

Sinon (par exemple si vous voulez éviter d'initialiser les éléments à zéro, ce qui pourrait être inutile), vous pouvez effectivement utiliser hstack y vstack pour ajouter un tableau contenant les nouveaux éléments ; numpy.concatenate() (voir pydoc numpy.concatenate) devrait aussi fonctionner (il est juste plus général, pour autant que je comprenne).

Dans les deux cas, je suppose qu'un nouveau bloc de mémoire doit être alloué afin d'étendre le tableau, et que toutes ces méthodes prennent à peu près le même temps.

2voto

dwf Points 2011

Quoi qu'il en soit, vous serez coincé en réallouant un morceau de mémoire, donc cela n'a pas vraiment d'importance si vous utilisez la fonction arr.resize() , np.concatenate , hstack/vstack etc. Notez que si vous accumulez beaucoup de données de manière séquentielle, les listes Python sont généralement plus efficaces.

0voto

Simon Points 14656

Vous devez utiliser reshape() et/ou redimensionner() en fonction de vos besoins précis.

Si vous souhaitez obtenir des informations sur les auteurs, il est probablement préférable de poster des messages sur le forum de discussion de numpy.

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