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?
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])
une alternative est "horizontal stack" (crée aussi un nouveau tableau):
np.hstack((0,a))
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)
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
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])