web-dev-qa-db-fra.com

Ajouter un élément à un tableau numpy

J'ai le tableau numpy suivant

import numpy as np

X = np.array([[5.], [4.], [3.], [2.], [1.]])

Je veux insérer [6.] au début . J'ai essayé:

X = X.insert(X, 0)

comment puis-je insérer dans X?

20
piRSquared

numpy a une fonction insert accessible via np.insert avec documentation .

Vous voudrez l'utiliser dans ce cas comme suit:

X = np.insert(X, 0, 6., axis=0)

le premier argument X spécifie l'objet dans lequel insérer.

Le deuxième argument 0 spécifie où.

Le troisième argument 6. spécifie ce qui doit être inséré.

Le quatrième argument axis=0 spécifie que l'insertion doit avoir lieu à la position 0 pour chaque colonne. Nous aurions pu choisir des lignes mais votre X est un vecteur de colonnes, alors j'ai pensé que nous resterions cohérents.

32
Rosey

Vous pouvez essayer ce qui suit

X = np.append(arr = np.array([[6]]), values = X, axis= 0)

Au lieu d'insérer 6 dans le X existant, ajoutons 6 par X.

Donc, le premier argument arr est un tableau numpy de la scalaire 6, le deuxième argument est votre tableau à ajouter, et le troisième est l'endroit où nous voulons ajouter

2

Je sais que c'est assez ancien, mais une solution courte consiste à utiliser des astuces de découpage numpy:

np.r_[[[6.]], X]

Si vous avez besoin de le faire dans une deuxième dimension, vous pouvez utiliser np.c_.

Je pense que c'est la version la moins encombrée que je puisse penser

1
T0eJam

Je viens d'écrire du code qui effectue cette opération environ 100 000 fois. Je devais donc trouver le moyen le plus rapide de le faire. Je ne suis en aucun cas un expert en efficacité du code, mais je pourrais comprendre certaines choses en utilisant la fonction magique %%timeit dans un cahier Jupyter.

Mes trouvailles:

np.concatenate(([number],array)) nécessite le moins de temps possible. Appelons cela une fois.

np.asarray([number] + list(array)) arrive à ~ 2x.

np.r_[number,array]is ~ 4x.

np.insert(array,0,number) semble être la pire option ici à 8x.

Je ne sais pas du tout comment cela change avec la taille de array (j'ai utilisé un tableau shape (15,)) et la plupart des options que j'ai suggérées ne fonctionnent que si vous voulez mettre le nombre au début. Cependant, puisque c’est ce que la question demande, je pense que c’est un bon endroit pour faire ces comparaisons.

1
jbf81tb