it-swarm.com.de

python, numpy; Wie wird das Element am Anfang eines Arrays eingefügt?

Ich habe ein numpy Array von komplexen Zahlen. Ich möchte also am Anfang des Arrays eine Null einfügen, Und den Rest des Arrays um eine Stelle nach vorne verschieben. 

beispiel: 

a = [1 + 2j, 5 + 7j,..]

Ich will machen:

a = [0 + 0j, 1 + 2j, 5 + 7j,..]

Was ist der einfachste Weg, dies zu tun?

19
Heiko Herlich

Einfachste Möglichkeit:

a = np.array([1 + 2j, 5 + 7j])
a = np.insert(a, 0, 0)

Dann:

>>> a
array([ 0.+0.j,  1.+2.j,  5.+7.j])

Beachten Sie, dass dadurch ein neues Array erstellt wird. Der 0 wird nicht wirklich in das ursprüngliche Array eingefügt.

Es gibt mehrere Alternativen zu np.insert, die alle auch ein neues Array erstellen:

In [377]: a
Out[377]: array([ 1.+2.j,  5.+7.j])

In [378]: np.r_[0, a]
Out[378]: array([ 0.+0.j,  1.+2.j,  5.+7.j])

In [379]: np.append(0, a)
Out[379]: array([ 0.+0.j,  1.+2.j,  5.+7.j])

In [380]: np.concatenate([[0], a])
Out[380]: array([ 0.+0.j,  1.+2.j,  5.+7.j])

In [381]: np.hstack([0, a])
Out[381]: array([ 0.+0.j,  1.+2.j,  5.+7.j])

In [382]: np.insert(a, 0, 0)
Out[382]: array([ 0.+0.j,  1.+2.j,  5.+7.j])
29
askewchan

Eine Alternative ist "horizontal stack" (erstellt auch ein neues Array):

np.hstack((0,a))
9
atomh33ls

Wenn Sie ein n-dimensionales Array haben, müssen Sie auch die Achse angeben. Andernfalls wird sie reduziert.

 np.insert(my_array, 0, myvalue, axis=1)
2
tsando

Ich habe alle fünf verschiedenen Methoden festgelegt, um ein Element am Anfang eines Arrays einzufügen. Hier sind die Ergebnisse:

In [20]: %timeit np.hstack([1, [1, 2, 3]])
10000 loops, best of 3: 30.4 µs per loop

In [21]: %timeit np.insert([1, 2, 3], 0, 1)
10000 loops, best of 3: 46.6 µs per loop

In [22]: %timeit np.r_[[1], [1, 2, 3]]
10000 loops, best of 3: 32.8 µs per loop

In [28]: %timeit np.append(1, [1, 2, 3])
10000 loops, best of 3: 23.4 µs per loop

In [29]: %timeit np.concatenate([[1], [1, 2, 3]])
The slowest run took 6.43 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 8.79 µs per loop
0
W. Zhu