J'essaie de créer une liste Python contenant les indices des éléments égaux à 1 dans une autre liste d'entiers (ou tableau Numpy). Ce que je suis en train est quelque chose comme ça (soit pour 1 ou 2 cas dimensions):Création d'un tableau d'index contenant la position d'une valeur dans un autre tableau
#--- 1D case ---
A = [ 1, 0, 0, 1, 1 ]
idx = []
for i in range(len(A)):
if A[ i ] == 1 : idx.append(i)
print(idx) # [ 0, 3, 4 ]
#--- 2D case ---
B = [ [ 1, 0, 0, 1, 1 ], [ 0, 1, 1 ] ]
idx2 = [ [] for i in range(len(B)) ]
for i in range(len(B)):
for j in range(len(B[ i ])):
if B[ i ][ j ] == 1 : idx2[ i ].append(j)
print(idx2) #[ [0,3,4], [1,2] ]
Cela peut également être écrit plus compacte
#--- 1D case ---
idx = [ i for i in range(len(A)) if A[ i ] == 1 ]
#--- 2D case ---
idx2 = []
for i in range(len(B)):
tmp = [ k for k in range(len(B[ i ])) if B[ i ][ k ] == 1 ]
idx2.append(tmp)
Mais je me demande s'il y a une manière encore plus compacte (ou fonction intégrée) qui peut être utilisée dans le même but. Y at-il une telle fonction pratique en Python pur, Numpy, ou ailleurs ...?
Jetez un oeil sur les mises à jour dans mon responce et cocher une case plus de solution pour le cas où les sous-listes ont une longueur inégale – Luchko
@Luchko Merci pour la mise à jour, je vais l'étudier aussi de près plus tard. Le tableau d'index que je fais est pour une analyse de cluster, dont la taille est inconnue a priori, donc j'ai utilisé une liste Python. Mais je pourrais aussi utiliser des tableaux Numpy pour indexer (ou convertir des listes -> tableaux) donc pas de problème. merci :) – septc