Ajouter un élément unique au tableau dans numpy


122

J'ai un tableau numpy contenant:

[1, 2, 3]

Je souhaite créer un tableau contenant:

[1, 2, 3, 1]

Autrement dit, je veux ajouter le premier élément à la fin du tableau.

J'ai essayé l'évidence:

np.concatenate((a, a[0]))

Mais je reçois une erreur disant ValueError: arrays must have same number of dimensions

Je ne comprends pas cela - les tableaux ne sont que des tableaux 1d.


1
np.insert([1,2,3], 3, 1)
Sparkler

Réponses:


163

append() crée un nouveau tableau qui peut être l'ancien tableau avec l'élément ajouté.

Je pense qu'il est plus normal d'utiliser la bonne méthode pour ajouter un élément:

a = numpy.append(a, a[0])

29
Cette commande ne modifie pas le atableau. Cependant, il renvoie un nouveau tableau modifié. Donc, si une a modification est nécessaire, elle a = numpy.append(a,a[0])doit être utilisée.
Amjad

np.appendutilise np.concatenate. Il s'assure simplement que l'addon a une dimension. L'erreur OP était le a[0]a 0 dimensions.
hpaulj

Pourquoi ajouter crée un tout nouveau tableau si je veux juste ajouter un élément?
ed22

Je n'aime pas le fait que nous devions appeler une autre fonction pour une commande aussi simple. Ce serait plus agréable s'il y avait une méthode interne dans le tableau lui-même a.append(1), a.add(1)ou même quelque chose d'analogue à des listes commea + [1]
Fernando Wittmann

17

Lorsque vous ajoutez une seule fois ou une fois de temps en temps, l'utilisation np.appendde votre tableau devrait être correcte. L'inconvénient de cette approche est que de la mémoire est allouée à un tout nouveau tableau à chaque fois qu'il est appelé. Lors de la croissance d'un tableau pour une quantité importante d'échantillons, il serait préférable de pré-allouer le tableau (si la taille totale est connue) ou de l'ajouter à une liste et de le convertir en tableau par la suite.

Utilisation np.append:

b = np.array([0])
for k in range(int(10e4)):
    b = np.append(b, k)
1.2 s ± 16.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Utilisation de la conversion de liste python en tableau par la suite:

d = [0]
for k in range(int(10e4)):
    d.append(k)
f = np.array(d)
13.5 ms ± 277 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

Tableau numpy pré-alloué:

e = np.zeros((n,))
for k in range(n):
    e[k] = k
9.92 ms ± 752 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

Lorsque la taille finale n'est pas connue, la pré-allocation est difficile, j'ai essayé de pré-allouer par tranches de 50 mais cela ne s'est pas rapproché de l'utilisation d'une liste.

85.1 ms ± 561 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

14

a[0]n'est pas un tableau, c'est le premier élément de aet n'a donc pas de dimensions.

Essayez d'utiliser à la a[0:1]place, qui retournera le premier élément de l' aintérieur d'un seul tableau d'éléments.



10

Cette commande,

numpy.append(a, a[0])

ne modifie pas le atableau. Cependant, il renvoie un nouveau tableau modifié. Donc, si une amodification est nécessaire, les éléments suivants doivent être utilisés.

a = numpy.append(a, a[0])


3

Cela peut être un peu excessif, mais j'utilise toujours la np.takefonction pour toute indexation enveloppante:

>>> a = np.array([1, 2, 3])
>>> np.take(a, range(0, len(a)+1), mode='wrap')
array([1, 2, 3, 1])

>>> np.take(a, range(-1, len(a)+1), mode='wrap')
array([3, 1, 2, 3, 1])

2

Disons a=[1,2,3]et vous voulez que ce soit le cas [1,2,3,1].

Vous pouvez utiliser la fonction d'ajout intégrée

np.append(a,1)

Ici, 1 est un entier, il peut s'agir d'une chaîne et il peut appartenir ou non aux éléments du tableau. Impressions:[1,2,3,1]


Bienvenue dans StackOverflow! Vous voudrez peut-être lire ce guide sur la façon de formater le code, puis mettre à jour votre réponse afin qu'elle soit plus lisible :) C'est aussi une très ancienne question avec une réponse acceptée, mieux vaut répondre à quelques nouvelles
0mpurdy

0

Si vous souhaitez ajouter un élément, utilisez append()

a = numpy.append(a, 1) dans ce cas, ajoutez le 1 à la fin du tableau

Si vous souhaitez insérer un élément, utilisez insert()

a = numpy.insert(a, index, 1) dans ce cas, vous pouvez placer le 1 où vous le souhaitez, en utilisant index pour définir la position dans le tableau.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.