web-dev-qa-db-fra.com

numpy - comment sélectionner tous les éléments d'un tableau à l'exception d'une séquence d'indices?

disons que j'ai un long tableau et une liste d'indices. Comment puis-je sélectionner tout sauf ces indices? J'ai trouvé une solution mais ce n'est pas élégant:

import numpy as np
x = np.array([0,10,20,30,40,50,60])
exclude = [1, 3, 5]
print x[list(set(range(len(x))) - set(exclude))]
5
kilojoules

C'est ce que numpy.delete fait. (Cela ne modifie pas le tableau d'entrée, vous n'avez donc pas à vous en soucier.)

In [4]: np.delete(x, exclude)
Out[4]: array([ 0, 20, 40, 60])
7
user2357112

np.delete fait différentes choses selon ce que vous lui donnez, mais dans un cas comme celui-ci, il utilise un masque comme:

In [604]: mask = np.ones(x.shape, bool)
In [605]: mask[exclude] = False
In [606]: mask
Out[606]: array([ True, False,  True, False,  True, False,  True], dtype=bool)
In [607]: x[mask]
Out[607]: array([ 0, 20, 40, 60])
9
hpaulj

np.in1d ou np.isin pour créer un index booléen basé sur exclude pourrait être une alternative:

x[~np.isin(np.arange(len(x)), exclude)]
# array([ 0, 20, 40, 60])

x[~np.in1d(np.arange(len(x)), exclude)]
# array([ 0, 20, 40, 60])
2
Psidom

Vous pouvez également utiliser une compréhension de liste pour l'index

>>> x[[z for z in range(x.size) if not z in exclude]]
array([ 0, 20, 40, 60])
0
percusse