En supposant
import numpy
a = numpy.array([[0, 1, 2, 3, 1],
[0, 2, 2, 1, 0],
[0, 4, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 4, 5]])
puis
b = a == a[0,:] # compares first row with all others using broadcasting
# b: array([[ True, True, True, True, True],
# [ True, False, True, False, False],
# [ True, False, True, True, False],
# [ True, True, True, True, False],
# [ True, True, True, False, False]], dtype=bool)
utilisant all
le long des lignes agit comme une opération de rangée sage and
(merci Divakar!):
c = b.all(axis=0)
# c: array([ True, False, True, False, False], dtype=bool)
que vous pouvez utiliser pour l'indexation booléenne
a[:, ~c]
Out:
array([[1, 3, 1],
[2, 1, 0],
[4, 3, 4],
[1, 3, 4],
[1, 4, 5]])
En tant oneliner laid:
a[:, ~(a == a[0,:]).all(0)]
Bonne idée de commencer. Mais, pourquoi ne pas faire simplement: '~ b.all (0)' et l'utiliser pour masquer les colonnes? Devrait être plus performant et aussi plus court que prod-réduire et la conversion de type. – Divakar
@Divakar merci, c'est en fait la commande que je cherchais: D –