web-dev-qa-db-fra.com

Ajouter un seul élément au tableau numpy

J'ai un tableau numpy contenant:

[1, 2, 3]

Je veux créer un tableau contenant:

[1, 2, 3, 1]

C'est-à-dire que 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 en disant ValueError: arrays must have same number of dimensions

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

82
robintw

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

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

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

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

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

11
DMA57361

Essaye ça:

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

http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html

concaténer nécessite que les deux éléments soient des tableaux numpy; Cependant, un [0] n'est pas un tableau. C'est pourquoi cela ne fonctionne pas.

9
reader_1000

Lorsque vous n’ajoutez qu’une ou plusieurs fois, l’utilisation de np.append sur votre tableau ne devrait pas poser de problème. L'inconvénient de cette approche est que la mémoire est allouée à un tout nouveau tableau chaque fois qu'il est appelé. Lorsque vous développez un tableau pour une quantité significative d'échantillons, il est préférable de pré-allouer le tableau (si la taille totale est connue) ou de l'ajouter à une liste et de le convertir ensuite en tableau.

Utiliser 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 python liste convertissant ensuite en tableau:

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)

Pré-affectation du tableau numpy:

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 est inconnue, il est difficile d'effectuer une pré-affectation. J'ai essayé d'effectuer une pré-affectation par tranche de 50 unités, mais la liste n'a pas failli être utilisée.

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

Cette commande,

numpy.append(a, a[0])

ne modifie pas le tableau a. Cependant, il retourne un nouveau tableau modifié. Donc, si a modification est nécessaire alors

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

doit être utilisé.

6
Amjad
t = np.array([2, 3])
t = np.append(t, [4])
6
user2804741

C'est peut-être un peu excessif, mais j'utilise toujours la fonction np.take pour toute indexation globale:

>>> 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])
3
Simon Streicher

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

Vous pouvez utiliser la fonction append intégrée

np.append(a,1)

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

1
Nandan Kulkarni