J'ai besoin de trouver des indices de toutes les occurrences d'un motif particulier dans une chaîne (ou un vecteur numérique). Par exemple, étant donné la liste booleen (dataframe):matlabish "strncmp" en python
z =
15 False
16 False
17 False
18 False
19 False
20 False
21 False
22 False
23 False
24 True
25 True
26 True
27 False
28 False
29 False
30 False
31 False
32 False
33 False
34 False
35 False
36 True
37 False
38 False
39 False
40 True
41 False
42 False
43 False
44 False
45 True
46 True
47 True
48 False
49 False
Je suis intéressé par une fonction qui renvoie les indices de toutes les occurrences de trois « vrai » dans une rangée, dans cet exemple, je devrais obtenir l'indice
>> result = some_function(z)
>> print result
>> [24, 45]
Dans matlab c'est assez facile avec la fonction strcmp, qui fait exactement ce dont j'ai besoin. Je suis sûr qu'il y a une fonction similaire dans Python.
J'ai essayé d'utiliser 'if ['True', 'True', 'True'] in z
: .... mais je fais quelque chose de mal.
UPD J'ai trouvé une solution très simple et générale à ces problèmes, qui fonctionne avec tout type de données:
def find_subarray_in_array(sub_array, large_array):
large_array_view = as_strided(large_array, shape=(len(large_array) - len(sub_array) + 1, len(sub_array)), strides=(large_array.dtype.itemsize,) * 2)
return where(numpy.all(large_array_view == sub_array, axis=1))[0]
où « sub_array » est le modèle qui devrait être trouvé dans le tableau plus large « large_array » .
@ Arnoldklein, cette approche fonctionne pour vous? –
@RahukMadhavan, oui c'est le cas, mais idéalement, il ne devrait pas utiliser le "inds" explicitement. Fondamentalement, étant donné une liste 1Dim de True/False (sans inds), il devrait retourner leurs index. Mais merci, j'apprécie votre aide. –
si vous avez juste besoin des indices, remplacez simplement inds [i] par i lui-même. –