0
votes

Comment supprimer un élément d'un tableau NUMPY 2D sans connaître sa position

J'ai un tableau 2D: [[0,1], [1,0], [1,1]] code>

Je veux supprimer le [0,1] code> élément sans connaître sa position dans le tableau (car les éléments peuvent être mélangés). P>

résultat devrait être: [[0,0], [1,0], [1,1]]] code> p>

J'ai essayé d'utiliser numpy.delete code> mais conserver Récupérez un tableau aplatie: P>

>>> np.where(arr==[0,1])
(array([0, 1, 1, 3]), array([0, 0, 1, 1]))


1 commentaires

Vous devez d'abord identifier l'emplacement.


3 Réponses :


0
votes

de la documentation:

numpy.delete (Arr, obj, axe = aucun)

Axe: Int, en option

L'axe le long de laquelle supprimer la sous-carraille définie par Obj. Si axe NONE Aucun, Obj est appliqué à la matrice aplatie

Si vous ne spécifiez pas l'axe (I.E. Aucun), il aplatira automatiquement votre tableau; Il vous suffit de spécifier le paramètre Axis, dans votre cas np.delete (arr, [0,1], axis = 0)

Cependant, comme dans l'exemple ci-dessus , [0,1] est une liste d'indices; Vous devez fournir les indices / emplacement (vous pouvez le faire avec np.where (condition, tableau) par exemple)

ici, vous avez un exemple de travail: < Pré> xxx


4 commentaires

Qui semble supprimer les éléments de 0 et 1; Je me retrouve avec tableau ([[[1, 0], [1, 1]])


Oui, c'est comme ça que ça marche.Unheureusement, vous devrez spécifier les indices. Une solution consiste à utiliser NP.where pour obtenir les indices de votre réseau et supprimer uniquement ces indices.


Alors, comment utiliseriez-vous np.where pour trouver cet élément unique? >>> np.where (arr == [0,1]) retourne (tableau (0, 1, 1, 3]), tableau (0, 0, 1, 1]))) - pas même sûr de la façon dont A 3 a eu lieu là-bas. Mais j'ai essayé de multiples permutations de cela et n'aurez nulle part.


Le problème que vous faites face est que NP.Where () sur des tableaux multidimensionnels retourne Row_indices et colonnes_indices, pas un tuple (x, y) où la condition est satisfaite. J'ai mis à jour l'exemple de manière à voir un exemple de travail.



1
votes

Ici, nous trouvons toutes les lignes correspondant au candidat [0, 1] code> xxx pré>

ou alternativement, les rangées qui ne Strong> Faites correspondre le candidat P>

>>> arr[~(arr == [0, 1]).all(axis=1)]
array([[0, 0],
       [1, 0],
       [1, 1]])


0 commentaires

1
votes
mask = (arr==np.array([0,1])).all(axis=1)
arr1 = arr[~mask,:]
Look at mask.. It should be [False, True,...].  

0 commentaires