Bonjour à tous
Je viens demander vos conseils avisés à propos d'outils permettant de référencer rapidement des informations dans une matrice de nombres (décimaux en plus)
Je dois en effet gérer une matrice d'environ 7 champs décimaux et comportant parfois jusqu'à 100000 lignes. Et je dois référencer (par exemple) toutes les valeurs des 2°, 3° et 5° champs et les lignes où sont ces valeurs
Si par exemple ma matrice est faite ainsi
1, 2, 3, 4, 12, 18, 20
2, 2, 4, 7, 14, 55, 42
3, 3, 4, 11, 55, 123, 700
Ben je dois alors référencer
2, [1, 2] (le second champ ayant la valeur "2" est attribué aux lignes 1 et 2)
3, [3] (le second champ ayant la valeur "3" est attribué à la ligne 3)
Mais aussi
3, [1] (le troisième champ ayant la valeur "3" est attribué à la ligne 1)
4, [2, 3] (le troisième champ ayant la valeur "4" est attribué aux lignes ligne 2 et 3)
Et aussi sur un 3° champ. Et ce n'est pas figé dans le marbre. Pour l'instant le cahier des charges s'arrête à 3 champs mais peut-être que plus tard il en faudra un 4°, un 5°...
Dans une première version je suis parti sur les boucles classiques. Un tableau de lignes, puis pour chaque ligne je récupère le 2°, 3° et 4° champs et j'ai des tableaux annexes que j'incrémente au fur et à mesure. Alors tant que j'étais à 2 champs ça allait encore mais quand j'en ai eu un 3°, les perfos se sont effondrées (près de 4mn pour traiter 100000 lignes). Surtout que l'utilisateur a la possibilité de désactiver telle valeur. Si par exemple il décide de désactiver la valeur 4 du 3° champ, me faut alors désactiver toutes les lignes ayant ce 3° champ à 4 puis refaire un calcul n'utilisant alors que les lignes restées actives. Et rebelote ça repart pour 4mn.
J'ai un peu cherché du coté de numpy mais il me semble que ce module est plus dédié à la manipulation de matrices que le référencement tel que je le présente ici.
Pour l'instant ma solution a été une bdd sqlite. Je bazarde mes lignes dans une table, et j'ai d'autres tables dédiées pour chaque champ. Là ça va assez vite car je m'appuie alors sur du requêtage sql pour désactiver les lignes ayant tel champ à telle valeur et une autre requête pour retraiter celles qui restent. Je descends mes perfs à la minute pour traiter 100000 lignes. Mais je venais ici voir à tout hasard si quelqu'un connaitrait une librairie plus dédiée à ce travail qui me permettrait d'aller encore plus vite.
Voilà - Merci à tous de votre attention
Partager