web-dev-qa-db-fra.com

python, numpy; Comment insérer un élément au début d'un tableau

J'ai un tableau numpy de nombres complexes. Je veux donc insérer zéro au début du tableau, Et déplacer le reste du tableau d'un endroit vers 

exemple: 

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

Je veux faire:

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

Quel est le moyen le plus simple de faire cela?

19
Heiko Herlich

Manière la plus simple:

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

Ensuite:

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

Notez que cela crée un nouveau tableau, cela n'insère pas réellement le 0 dans le tableau d'origine.

Il existe plusieurs alternatives à np.insert, qui créent toutes un nouveau tableau:

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

Une alternative est "pile horizontale" (crée également un nouveau tableau):

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

De plus, si vous avez un tableau à n dimensions, vous devez également spécifier l'axe, sinon il sera aplati:

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

J'ai chronométré les cinq méthodes différentes pour insérer un élément au début d'un tableau. Voici les résultats:

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