0
votes

Comment supprimer des lignes de tableau NUMPY par plusieurs indices de ligne?

J'ai deux listes d'index ( IDX [0] code> et IDX [1] code>), et je devrais supprimer les lignes correspondantes de Numpy Array Y_TEST .poSp>y_testle

13  1   10


3 commentaires

Pas + , mais & pour booléen et opération


Quel était ~ [0,2] censé faire? [0,2] + [1,3] Fonctionne Pour rejoindre 2 Listes produisant [0,2,1,3] .


Si IDX est une matrice numpue, à l'aide de l'opérateur de négation binaire, il est pas faire ce que vous pensez que c'est.


3 Réponses :


1
votes

Vous pouvez utiliser Numpy.Delete qui Supprime les sous-bras le long de l'axe.

np.delete(y_test, idx, axis=0)


2 commentaires

Cette solution me donne un résultat étrange. Dans mes données réelles définies, la forme de y_test est (60000,1). Ensuite, la longueur de IDX est 6000. Ainsi, je m'attends au résultat de np.delete (Y_TEST, IDX, Axis = 0) Pour avoir la forme (54000,1), mais c'est 56846


Sans les données réelles, je ne peux que deviner, mais peut-être que les entrées in IDX ne sont pas uniques. Vous pouvez essayer numpy.unique et comparer les tailles.



1
votes

Au lieu d'éliminer des éléments, faites simplement un nouveau tableau avec les personnes désirées. Cela permettra à toute indexation future de se faire cogner et de maintenir l'ancien tableau.

import numpy as np
y_test = np.asarray([[12, 11, 10], [1, 2, 2], [3, 2, 3], [4, 1, 2], [13, 1, 10]])
idx = [[0, 2], [1, 3]]

# flatten list of lists
idx_flat = [i for j in idx for i in j]

# assign values that are NOT in your idx list to a new array
result = [row for num, row in enumerate(y_test) if num not in idx_flat]

# cast this however you want it, right now 'result' is a list of np.arrays
print result

[array([13,  1, 10])]



0 commentaires

0
votes

Puisque vous utilisez numpy, je suggère de masquer de cette manière.


Configuration: strong> xxx pré>

p>


Génère le masque: strong>

générer un masque de ceux que Configurez sur Zero Eléments à l'index dans IDX CODE>: P>

y_test[~np.all(y_test * mask == 0, axis=1)]
#=> [[13  1 10]]


1 commentaires

Que veux-tu dire?