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?
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])
Une alternative est "pile horizontale" (crée également un nouveau tableau):
np.hstack((0,a))
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)
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