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

j'ai un tableau numpy des nombres complexes. Donc je veux insérer zéro au début du tableau, et déplacez le reste de la rangée d'un endroit vers l'avant.

exemple:

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

je veux faire:

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

Quelle est la façon la plus simple de faire cela?

19
demandé sur Heiko Herlich 2013-11-20 20:15:10

5 réponses

voie la plus simple:

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

Puis:

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

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

il existe plusieurs alternatives à np.insert, qui créer 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
répondu askewchan 2016-04-08 11:39:14

une alternative est "horizontal stack" (crée aussi un nouveau tableau):

np.hstack((0,a))
9
répondu atomh33ls 2013-11-20 16:26:07

Aussi, si vous avez un n-dimensions, tableau, vous devez spécifier l'axe ainsi, sinon il se aplatie:

 np.insert(my_array, 0, myvalue, axis=1)
2
répondu tsando 2016-06-09 10:46:34

j'ai programmé tous les cinq différentes méthodes 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
répondu W. Zhu 2018-02-03 02:12:55

en plus, si vous voulez ajouter n nombres de lignes avec des valeurs zéro. vous pouvez créer un tableau zéro et utiliser hstack:

zero_array = np.zeros([n])
new = np.hstack([zero_array,old_array])
-1
répondu kwant 2017-05-15 08:42:17