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.
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])
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.
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.
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)
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é.
t = np.array([2, 3])
t = np.append(t, [4])
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])
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]