Fügen Sie dem Array in numpy ein einzelnes Element hinzu


122

Ich habe ein numpy Array mit:

[1, 2, 3]

Ich möchte ein Array erstellen, das Folgendes enthält:

[1, 2, 3, 1]

Das heißt, ich möchte das erste Element am Ende des Arrays hinzufügen.

Ich habe das Offensichtliche versucht:

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

Aber ich bekomme eine Fehlermeldung ValueError: arrays must have same number of dimensions

Ich verstehe das nicht - die Arrays sind beide nur 1d Arrays.


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

Antworten:


163

append() Erstellt ein neues Array, das das alte Array mit dem angehängten Element sein kann.

Ich denke, es ist normaler, die richtige Methode zum Hinzufügen eines Elements zu verwenden:

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

29
Dieser Befehl ändert das aArray nicht. Es wird jedoch ein neues modifiziertes Array zurückgegeben. Wenn also eine a Änderung erforderlich ist, a = numpy.append(a,a[0])muss diese verwendet werden.
Amjad

np.appendverwendet np.concatenate. Es stellt nur sicher, dass das Addon eine Dimension hat. Der OP-Fehler war der a[0]hat 0 Dimensionen.
hpaulj

Warum wird durch Anhängen ein ganz neues Array erstellt, wenn ich nur ein Element hinzufügen möchte?
ed22

Mir gefällt nicht, dass wir für einen so einfachen Befehl eine andere Funktion aufrufen müssen. Es wäre schöner, wenn es eine innere Methode im Array selbst gäbe a.append(1), a.add(1)oder sogar etwas Analoges zu Listen wiea + [1]
Fernando Wittmann

17

Wenn Sie hin und wieder nur einmal oder einmal anhängen, sollte die Verwendung np.appendin Ihrem Array in Ordnung sein. Der Nachteil dieses Ansatzes besteht darin, dass bei jedem Aufruf Speicher für ein völlig neues Array zugewiesen wird. Wenn Sie ein Array für eine erhebliche Anzahl von Samples vergrößern, ist es besser, das Array entweder vorab zuzuweisen (wenn die Gesamtgröße bekannt ist) oder an eine Liste anzuhängen und anschließend in ein Array zu konvertieren.

Verwenden von 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)

Verwenden der Python-Liste, die anschließend in ein Array konvertiert wird:

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)

Numpy-Array vorab zuweisen:

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)

Wenn die endgültige Größe unbekannt ist, ist die Vorzuweisung schwierig. Ich habe versucht, die Vorzuweisung in Blöcken von 50 vorzunehmen, aber es kam der Verwendung einer Liste nicht nahe.

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

14

a[0]ist kein Array, es ist das erste Element von aund hat daher keine Dimensionen.

Versuchen Sie a[0:1]stattdessen, das erste Element ainnerhalb eines einzelnen Elementarrays zurückzugeben .



10

Dieser Befehl,

numpy.append(a, a[0])

ändert das aArray nicht. Es wird jedoch ein neues modifiziertes Array zurückgegeben. Wenn also eine aÄnderung erforderlich ist, muss Folgendes verwendet werden.

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


3

Dies mag etwas übertrieben sein, aber ich verwende die np.takeFunktion immer für jede Rundum-Indizierung:

>>> 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

Sagen wir, a=[1,2,3]und Sie möchten, dass es so ist[1,2,3,1] .

Sie können die integrierte Append-Funktion verwenden

np.append(a,1)

Hier ist 1 ein int, es kann eine Zeichenfolge sein und es kann zu den Elementen im Array gehören oder nicht. Drucke:[1,2,3,1]


Willkommen bei StackOverflow! Vielleicht möchten Sie diese Anleitung lesen , wie Sie Code formatieren und dann Ihre Antwort aktualisieren, damit sie besser lesbar ist :) Auch dies ist eine sehr alte Frage mit einer akzeptierten Antwort, besser, um einige neue zu beantworten
0mpurdy

0

Wenn Sie ein Element hinzufügen möchten, verwenden Sie append()

a = numpy.append(a, 1) In diesem Fall fügen Sie die 1 am Ende des Arrays hinzu

Wenn Sie ein Element einfügen möchten, verwenden Sie insert()

a = numpy.insert(a, index, 1) In diesem Fall können Sie die 1 an die gewünschte Stelle setzen und mithilfe des Index die Position im Array festlegen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.