194 votes

Numpy - ajouter une ligne au tableau

Comment ajouter des lignes à un tableau numpy ?

J'ai un tableau A :

A = array([[0, 1, 2], [0, 2, 0]])

Je souhaite ajouter des lignes à ce tableau à partir d'un autre tableau X si le premier élément de chaque ligne de X répond à une condition spécifique.

Les tableaux Numpy ne disposent pas d'une méthode "append" comme celle des listes, du moins c'est ce qu'il semble.

Si A et X étaient des listes, je me contenterais de faire :

for i in X:
    if i[0] < 3:
        A.append(i)

Y a-t-il un numpythonique manière de faire l'équivalent ?

Merci, S ;-)

0 votes

6voto

naman1994 Points 115
import numpy as np
array_ = np.array([[1,2,3]])
add_row = np.array([[4,5,6]])

array_ = np.concatenate((array_, add_row), axis=0)

4voto

RAno Points 69

J'utilise 'np.vstack' qui est plus rapide, EX :

import numpy as np

input_array=np.array([1,2,3])
new_row= np.array([4,5,6])

new_array=np.vstack([input_array, new_row])

3voto

user2475529 Points 1

Si vous pouvez faire la construction en une seule opération, alors quelque chose comme la réponse vstack-with-fancy-indexing est une bonne approche. Mais si votre condition est plus compliquée ou si vos lignes arrivent à la volée, vous voudrez peut-être faire croître le tableau. En fait, la façon numpythique de faire quelque chose comme ça - faire croître dynamiquement un tableau - est de faire croître dynamiquement une liste :

A = np.array([[1,2,3],[4,5,6]])
Alist = [r for r in A]
for i in range(100):
    newrow = np.arange(3)+i
    if i%5:
        Alist.append(newrow)
A = np.array(Alist)
del Alist

Les listes sont hautement optimisées pour ce type de modèle d'accès ; vous ne disposez pas d'une indexation multidimensionnelle numpy pratique sous forme de liste, mais tant que vous ajoutez, il est difficile de faire mieux qu'une liste de tableaux de rangées.

2voto

Charles Chow Points 63

Vous pouvez utiliser numpy.append() pour ajouter une ligne au tableau numpty et le remodeler en matrice plus tard.

import numpy as np
a = np.array([1,2])
a = np.append(a, [3,4])
print a
# [1,2,3,4]
# in your example
A = [1,2]
for row in X:
    A = np.append(A, row)

0 votes

Comme la forme du tableau est modifiée pendant l'ajout, ce n'est pas vraiment une solution pour ajouter une ligne.

2voto

Elyas Karimi Points 286

J'utilise numpy.insert(arr, i, the_object_to_be_added, axis) afin d'insérer object_to_be_added à la i'me ligne (axis=0) ou colonne (axis=1)

import numpy as np

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

np.insert(a, 1, [55, 66], axis=1)
# array([[ 1, 55,  2,  3],
#        [ 5, 66,  4,  6]])

np.insert(a, 2, [50, 60, 70], axis=0)
# array([[ 1,  2,  3],
#        [ 5,  4,  6],
#        [50, 60, 70]])

Discussion trop ancienne, mais j'espère que cela aidera quelqu'un.

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