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.

robintw
quelle
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])
steabert
quelle
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)
Jürgen Strydom
quelle
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 .

DMA57361
quelle
12

Versuche dies:

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

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

Bei der Verkettung müssen beide Elemente Numpy-Arrays sein. a [0] ist jedoch kein Array. Deshalb funktioniert es nicht.

reader_1000
quelle
Oder einfacher np.concatenate((a, [a[0]])). Die Liste wird ohnehin automatisch zu einem Array-Typ heraufgestuft, wodurch Sie einige Eingaben sparen.
Mad Physicist
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])
Amjad
quelle
7
t = np.array([2, 3])
t = np.append(t, [4])
user2804741
quelle
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])
Simon Streicher
quelle
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]

Nandan Kulkarni
quelle
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.

Adejonghm
quelle