Page 86 sur 87

Re: Informatique quantique (ou pas)

Publié : lun. juin 22, 2026 3:14 pm
par Ravortel
L'argumentaire pour le RAZ n'est pas ultra-convainquant :D

Re: Informatique quantique (ou pas)

Publié : lun. juin 22, 2026 6:33 pm
par OSR
Ravortel a écrit : lun. juin 22, 2026 3:14 pmL'argumentaire pour le RAZ n'est pas ultra-convainquant :D
D'expérience il faut vider régulièrement ses SMS et ses listes d'appels pour que le téléphone ne soit pas trop ralenti.

Et je ne suis pas le seul à le constater, j'avais suivi le conseil donné par pas mal d'utilisateurs de dumbphones de la marque, ça m'avait bien servi à une époque où plusieurs fonctions (annuaire, composition de SMS...) étaient devenues inutilisables à cause de journaux SMS/appels trop lourds.

Là le RAZ a sans doute vidé pas mal d'applis inutiles et purgé des caches divers (dont sans doute quelques détritus d'applis désintallées), mon téléphone semble re-ressuscité (la composition de SMS et l'usage de la radio FM étaient devenus aléatoires ces derniers jours).

Re: Informatique quantique (ou pas)

Publié : lun. juin 22, 2026 11:49 pm
par cdang
OSR a écrit : lun. juin 22, 2026 6:33 pmça m'avait bien servi à une époque où plusieurs fonctions (annuaire, composition de SMS...) étaient devenues inutilisables à cause de journaux SMS/appels trop lourds.
Je suis sorti de ma limérence, je vais pouvoir purger mes SMS...

Re: Informatique quantique (ou pas)

Publié : lun. juin 29, 2026 7:36 pm
par cdang
Coucou les gens,

Quelqu'un pourrait m'aider à optimiser du code Python 3 avec NumPy ?

Le contexte : j'ai un fichier qui décrit une géométrie, sous la forme d'une liste d'un million (1e6) de points ; un point, c'est un entier, l'identifiant id, et trois réels, les coordonnées x, y et z. J'ai donc un fichier CSV maillage qui a la forme

Code : Tout sélectionner

id1, x1, y1, z3
id2, x2, y2, z2
id3, x3, y3, z3
...
Et j'ai un fichier de valeurs pour 100 000 (1e5) de ces points, donc un entier id, l'identifiant du point, et un réel v, la valeur. J'ai donc un second fichier CSV valeurs qui a la forme

Code : Tout sélectionner

id1, v1
id2, v2
id3, v3
...
Il faut que je regroupe les coordonnées avec les valeurs, donc avoir au final un CSV resultat de la forme

Code : Tout sélectionner

id1, x1, y1, z3, v1
id2, x2, y2, z2, v2
id3, x3, y3, z3, v3
...
Et pour cela que j'élimine, d'une manière ou d'une autre, les points qui n'ont pas de valeur associée.

Les deux fichiers sont classés par valeurs d'identifiants croissantes.

Bon, actuellement, ça me prend un peu moins de 3 minutes, c'est acceptable ; mais je fais une boucle sur la liste des 1e6 points (et à chaque boucle je compare aux 1e5 points ayant une valeur) et je trouve ça inélégant, et inefficace, au possible. En gros, j'ai fait un truc du genre (reproduit de mémoire, je n'ai pas le code exact sous les yeux) :

Code : Tout sélectionner

longueur = len(maillage) # nombre de points, env. 1e6
booleen = (np.ones(longueur) == 1) # initialisation d'un vecteur de booléens 
for i in range(longueur):
   booleen[i] = len(np.where(maillage[i, 0] == valeurs[:, 0])[0]) > 0
   # si la valeur maillage[i, 0] se trouve quelque part dans le vecteur valeurs[:, 0], np.where() n'est pas vide
   # donc booleen[i] est vrai si le point a une valeur, faux s'il n'en a pas
resultat = np.concatenate(maillage[booleen, :], valeurs[:, 1], axis=1)
Pour la fonction np.where() : https://numpy.org/doc/stable/reference/ ... umpy.where

Bref, quelqu'un aurait une solution élégante et parallèle pour remplacer cette boucle ?

(Tiens, je pourrai peut-être commencer par extraire le vecteur valeurs[:, 1] une fois pour toute au lieu de le faire à chaque itération... J'essaie demain voir ce que je gagne.)

Re: Informatique quantique (ou pas)

Publié : lun. juin 29, 2026 10:13 pm
par Tgx
je code plus depuis un moment mais de mémoire, avec les algo de tri, on peut passer de n² à n log n. Quicksort, peut-être ?
Tu dois pouvoir appliquer le même genre de logique ?

Re: Informatique quantique (ou pas)

Publié : mar. juin 30, 2026 8:29 am
par Mugen
@cdang je ne comprends pas comment se fait le lien entre les points de ton premier fichier et les valeurs du second. Tel qu'énoncé, j'ai immédiatement pensé à des températures, mais j'imagine que ce n'est pas ça, car sinon il n'y aurait pas moyen de faire de lien...

Bon, je suis allergique au Python, donc je n'aurai sans doute pas la solution adaptée à ton problème... Mais il doit y avoir des fonctions de tri sur les données, non ?

Re: Informatique quantique (ou pas)

Publié : mar. juin 30, 2026 11:30 am
par Inigin
Si je traduis en termes non-Python, tu cherches à faire une recherche verticale pour rendre les valeurs du deuxième fichier dans le premier, et ensuite une purge.

Re: Informatique quantique (ou pas)

Publié : mar. juin 30, 2026 2:13 pm
par cdang
Mugen a écrit : mar. juin 30, 2026 8:29 am @cdang je ne comprends pas comment se fait le lien entre les points de ton premier fichier et les valeurs du second. Tel qu'énoncé, j'ai immédiatement pensé à des températures, mais j'imagine que ce n'est pas ça, car sinon il n'y aurait pas moyen de faire de lien...
Le lien, c'est l'identifiant du point. Chaque point a un numéro N, la première colonne. Le premier fichier donne les coordonnées (X, Y, Z) du point N, le second fichier donne la valeur V associée au point N (ça peut être une température si tu veux, ça n'a pas d'importance, ici c'est une contrainte au sens de la mécanique des milieux continus).

Sauf que tous les points N n'ont pas de valeur.

@Inigin : oui, on peut voir ça comme ça.

Re: Informatique quantique (ou pas)

Publié : mar. juin 30, 2026 4:53 pm
par Nolendur
cdang a écrit : lun. juin 29, 2026 7:36 pm Coucou les gens,

Quelqu'un pourrait m'aider à optimiser du code Python 3 avec NumPy ?

[...]


Alors, il m'a fallu un peu de temps pour comprendre la logique du truc (elle est un peu emberlificotée :) ) mais sous réserve que j'ai tout compris, tu devrais obtenir le même résultat, avec une meilleure efficacité en complexité, si tu utilises le code suivant :

Code : Tout sélectionner

id_maillage = maillage[:, 0]
id_valeurs  = valeurs[:, 0]

_, commun_maillage, commun_valeurs = np.intersect1d(
    id_maillage,
    id_valeurs,
    assume_unique=True,
    return_indices=True
)

resultat = np.concatenate(
    (
        maillage[commun_maillage],
        valeurs[commun_valeurs, 1:2]
    ),
    axis=1
)

Explication : intersect1d fait tout le boulot de sélectionner les lignes en commun, et concatenate assemble les lignes communes.

Attention : cette solution ne marche que si les deux matrices sont déjà pré-triées sur la colonne "id".

Il a fallu que je me replonge dans la documentation de numpy, c'est pas quelque chose que j'utilise souvent, donc vérifie et teste le code avant de crier victoire.

Re: Informatique quantique (ou pas)

Publié : mar. juin 30, 2026 5:16 pm
par Ramentu
Tu veux définitivement utiliser une fonction de tri.
2 fichier csv d'un million de lignes (id aléatoires entre 0 et 2 million)
listes triées par id, sans doublon d'id
Temps d'exécution : 0.033 secondes (sur pc de gaming, soit :mrgreen: )

Tu utilises numpy.searchsorted pour bâtir un index des points ou tu devrais insérer chaque ligne de la liste 2 dans la liste 1 pour obtenir un array trié,
pour chaque ligne dans el tableau 2, tu regardes si l'id1 au point d'insertion est égale à l'id2 ( tu insèrerais id2 juste avant l'id1 identique ou plus grande pour avoir la liste triée)
tu crée un masque, et tu extraits les lignes correspondantes dans les 2 listes, puis tu crées ton tableau résultat
(avec l'aide de Claude pour la gestion des fichiers et le masque, bien plus élégant que la boucle que j'avais envisagée au début :) )


import numpy as np
import time

list1 = np.genfromtxt("list1.csv", delimiter=",", names=["id","x","y","z"], dtype=None, skip_header=1)
list2 = np.genfromtxt("list2.csv", delimiter=",", names=["id","v"], dtype=None, skip_header=1)

start = time.perf_counter()

index = np.searchsorted(list1["id"], list2["id"])
masque = list1["id"][index] == list2["id"]

ok1 = list1[index[masque]]
ok2 = list2[masque]

result = np.empty(masque.sum(), dtype=[("id","i8"),("x","f8"),("y","f8"),("z","f8"),("v","f8")])
result["id"] = ok1["id"]
result["x"] = ok1["x"]
result["y"] = ok1["y"]
result["z"] = ok1["z"]
result["v"] = ok2["v"]

elapsed = time.perf_counter() - start
print(f"Temps d'exécution : {elapsed:.3f} secondes")

np.savetxt("result.csv", result, delimiter=",", header="id,x,y,z,v", comments="", fmt=["%d","%.6f","%.6f","%.6f","%.6f"])

Re: Informatique quantique (ou pas)

Publié : mar. juin 30, 2026 5:23 pm
par cdang
Merci @Nolendur et @Ramentu, je regarde ça demain (ce soir j'ai ciné ^^).

C'est quoi le _, ?

[Ajout] Ah, c'est bon, j'ai trouvé la réponse, c'est pour ignorer le premier élément renvoyé
https://www.iditect.com/faq/python/mean ... rator.html

Re: Informatique quantique (ou pas)

Publié : mar. juin 30, 2026 5:29 pm
par Nolendur
cdang a écrit : mar. juin 30, 2026 5:23 pm Merci @Nolendur et @Ramentu, je regarde ça demain (ce soir j'ai ciné ^^).

C'est quoi le _, ?

C'est pour ne pas récupérer un paramètre renvoyé par la fonction et dont tu n'as pas besoin. On pourrait mettre à la place une variable bidon, mais ça pourrait engendrer de la confusion, donc on met ça à la place.

EDIT: désolé, ma réponse a croisé ton auto-réponse :)

Re: Informatique quantique (ou pas)

Publié : mar. juin 30, 2026 5:37 pm
par Ramentu
pris de vitesse par @Nolendur :bierre:
j'étais parti sur searchsorted puis une boucle, puis sur searchsorted et un masque d'extraction (mieux), mais intersect1d fait tout le boulot en une commande :)
(pas familier non plus avec numpy ...)

Re: Informatique quantique (ou pas)

Publié : mar. juin 30, 2026 7:10 pm
par Mugen
Après, pour vraiment aller vite, il faudra un autre langage que le python. :P

Re: Informatique quantique (ou pas)

Publié : mar. juin 30, 2026 7:10 pm
par Ramentu
Au passage, si tu n'as jamais plus d'1 million de lignes, Excel fait le boulot en - de 30 secondes (je n'ai pas chronométré précisément, test sur les mêmes tables que celles utilisées pour tester le script))
Un simple xlookup de la table 1 sur la table 2, tu dois pouvoir faire mieux avec une powerquery et un merge, mais pour le résultat attendu, a quoi bon ;)
Ne pas essayer sur un laptop poussif avec peu de ram :mrgreen: - et ne pas oublier de "copy/paste as value" la colonne xlookup avant de faire quoi que ce soit d'autre ;)

Bien sur, ça ne vaut pas les quelques centièmes de secondes d'un script python*, mais c'est plus rapide que 2 boucles imbriquées, et si tu ne dois le faire que de temps à autre ...
(*:Il ne faut que 4 centièmes de seconde à Python pour fusionner les 2 listes. Mais revoyons le tri au ralenti ... :mrgreen: )