#1 Le 19/02/2013, à 13:06
- bmzoom
[RESOLU] Python et liste
bonjour ,
tab1 tab2
2214 62
2215 50
2216 57
2217 67
..
..
J'ai une liste double dans un fichier de 3000 points ( courbe de gauss ) .
En lisant tab1 , tab2 , je veux garder que les maxi sur tab2
et afficher :
( Il y 4 ou 5 maxi parmi 3000 points , mais ils ne sont pas les uns derrière les autres )
print 'REPET MAXI =',tab2,' AVEC LA SOMME DE =',tab1
..
Le fichier de 3000 pt est ici
Dernière modification par bmzoom (Le 19/02/2013, à 22:54)
Hors ligne
#2 Le 19/02/2013, à 13:56
- pingouinux
Re : [RESOLU] Python et liste
Bonjour,
Peux-tu montrer le bout de programme que tu as déjà écrit ?
Hors ligne
#3 Le 19/02/2013, à 14:39
- bmzoom
Re : [RESOLU] Python et liste
Il faut trouver le max et après les autres de même niveau .
C'est un essai sur 420 valeurs :
#! /usr/bin/env python
# -*- coding: Latin-1 -*-
ofi=open('dt3000','r')
dat=ofi.readline().rstrip('\n\r')
n=len(dat)
n1=dat.find(' ')
dat1=dat[0:n1]
dat2=dat[n1+1:n]
dt1=int(dat1)
dt2=int(dat2)
print dt1,dt2
max2=10;max1=10
mix2='';mix1=''
for i in range (420):
dat=(ofi.readline().rstrip('\n\r'))
n=len(dat)
n1=dat.find(' ')
dat1=dat[0:n1]
dat2=dat[n1+1:n]
dt1=int(dat1)
dt2=int(dat2)
print dt1,dt2
if (dt2>=max2):
max2=dt2
mix2 = mix2+' '+dat2
mix1 = mix1+','+dat1
print 'REPET MAXI =',mix2,' AVEC LA SOMME DE =',mix1
ofi.close()
C'est faisable avec 2 passages
562 1430
REPET MAXI = 562 AVEC LA SOMME DE = 1362
REPET MAXI = 562 AVEC LA SOMME DE = 1430
(1430, 1362, 0)
AXE DU CENTRE DE LA GAUSSIENNE : 1396
VALEUR AU CENTRE DE LA GAUSSIENNE : 482
Avec 3 passages
Dernière modification par bmzoom (Le 19/02/2013, à 16:03)
Hors ligne
#4 Le 19/02/2013, à 17:39
- pingouinux
Re : [RESOLU] Python et liste
Je n'ai pas bien compris ce que tu essayais de faire, mais ton script peut se simplifier ainsi :
#! /usr/bin/env python
# -*- coding: Latin-1 -*-
max2=10;max1=10
mix2='';mix1=''
with open('dt3000','r') as ofi :
for dat in ofi.readlines() :
dat1,dat2 = dat.split()
dt1=int(dat1)
dt2=int(dat2)
print dt1,dt2
if (dt2>=max2):
max2=dt2
mix2 = mix2+' '+dat2
mix1 = mix1+','+dat1
print 'REPET MAXI =',mix2,' AVEC LA SOMME DE =',mix1
Hors ligne
#5 Le 19/02/2013, à 18:47
- bmzoom
Re : [RESOLU] Python et liste
Faut tracer la gaussienne avec gnuplot avec la console
Tu essayeras après de trouver les maxi , l'axe , etc ...
>>> gnuplot -persist tup.gpl
fichier tup.gpl ci-dessous :
set grid;
set xlabel "Somme";
set ylabel "Répétition";
set terminal png;
set output 'tup.png';
plot 'dt3000'
Hors ligne
#6 Le 19/02/2013, à 19:20
- pingouinux
Re : [RESOLU] Python et liste
Pour localiser le maximum de la courbe, mais c'est une méthode assez grossière :
#! /usr/bin/env python
# -*- coding: Latin-1 -*-:
max2=-1
with open('dt3000','r') as ofi :
for dat in ofi.readlines() :
dat1,dat2 = dat.split()
dt1=int(dat1)
dt2=int(dat2)
# print dt1,dt2
if (dt2>max2):
max2=dt2
n_max2=1
mix1 = dt1
elif (dt2==max2):
n_max2 += 1
mix1 = mix1+dt1
print("NB_DE_POINTS_MAX=%d X_MAX=%d => SOMME_Y_MAX=%d MOYENNE_Y_MAX=%.2f"%(n_max2,max2,mix1,mix1/n_max2))
qui donne ce résultat
NB_DE_POINTS_MAX=2 X_MAX=562 => SOMME_Y_MAX=2792 MOYENNE_Y_MAX=1396.00
Hors ligne
#7 Le 19/02/2013, à 21:43
- grim7reaper
Re : [RESOLU] Python et liste
Salut,
Je serais toi je passerait par numpy.
from numpy import loadtxt, where
def main():
data = loadtxt('dt3000')
tab1 = data[:, 0]
tab2 = data[:, 1]
max_idx = where(tab2 == tab2.max())
for idx in max_idx[0]:
print('REPET MAXI = {} AVEC LA SOMME DE = {}'.format(tab2[idx],
tab1[idx]))
if __name__ == '__main__':
main()
Donne :
REPET MAXI = 562.0 AVEC LA SOMME DE = 1362.0
REPET MAXI = 562.0 AVEC LA SOMME DE = 1430.0
Hors ligne
#8 Le 19/02/2013, à 22:53
- bmzoom
Re : [RESOLU] Python et liste
ok - c'est bien de comparer
moi je passe par des boucles et vous vous sortez des modules ou fonctions
du chapeau ..
Hors ligne
#9 Le 20/02/2013, à 09:27
- elendil
Re : [RESOLU] Python et liste
D'ailleurs pour le plot tu peux jeter un œil à Matplotlib plutôt que Gnuplot ce qui te permettra de ne faire qu'un seul script en Python.
Hors ligne
#10 Le 20/02/2013, à 11:47
- bmzoom
Re : [RESOLU] Python et liste
ok elendil ..
set grid;
set xlabel "Somme";
set ylabel "Répétition";
set terminal png;
set output 'tup.png';
plot 'dt3000'
Alors converti le graphe vers une fenêtre avec matplolib
En traçant les 2 points au sommet du graphe
MAXI = 562 AVEC LA SOMME DE = 1362
MAXI = 562 AVEC LA SOMME DE = 1430
A+
Hors ligne
#11 Le 20/02/2013, à 13:17
- elendil
Re : [RESOLU] Python et liste
J'ai pas très bien compris ce que tu veux dire par :
En traçant les 2 points au sommet du graphe
Gnuplot avec ton code donne :
Python et Matplotlib :
Le script python en reprenant la méthode donnée par grim7reaper pour les maximums :
#!/usr/bin/env python
#-*-coding: utf8 -*-
import matplotlib.pyplot as plt
import numpy as np
fichier = "dt3000"
output = "tup_python.png"
if __name__ == '__main__':
## Lecture du fichier
data = np.loadtxt(fichier)
tab1 = data[:, 0]
tab2 = data[:, 1]
## Recherche des indices des maximums
max_idx = np.where(tab2 == tab2.max())
for idx in max_idx[0]:
print('REPET MAXI = {} AVEC LA SOMME DE = {}'.format(tab2[idx], tab1[idx]))
## Plot
fig = plt.figure()
plt.plot(tab1, tab2, 'r+', label=fichier)
plt.grid()
plt.legend(numpoints=1, frameon=False)
plt.xlabel("Somme")
#plt.ylim(ymax=tab2[max_idx[0][0]]) ## Si décommentée force l'affichage de la courbe en haut du graphique
plt.ylabel("Répétition".decode('utf-8')) #decode est une astuce pour pouvoir utiliser des caractères accentués
plt.savefig(output, bbox_inches='tight')
#plt.show() ## Pour afficher le résultat avec Matplotlib
Dernière modification par elendil (Le 20/02/2013, à 13:21)
Hors ligne
#12 Le 20/02/2013, à 15:48
- bmzoom
Re : [RESOLU] Python et liste
Comme tu peux le voir le haut de la gaussienne n'est pas pointu
Il y a 2 maxi en x1=1362 et x2=1430 ( pour ymax=562 )
L'axe est le milieu de (1430,1362) ou AXE DU CENTRE DE LA GAUSSIENNE : 1396
Avec matplotlib , peut tu ajouter , après calcul ces informations dans le graphe
Tout en 1 , c'est :
- graphe => sortie 1
- calcul
- information + graphe => sortie 2
Hors ligne
#13 Le 20/02/2013, à 16:22
- elendil
Re : [RESOLU] Python et liste
J'ai ajouté une droite à l'endroit que tu appelles "axe de la gaussienne" avec sa valeur en haut du graphique.
Voilà ce que ça donne :
Le code :
#!/usr/bin/env python
#-*-coding: utf8 -*-
import matplotlib.pyplot as plt
import matplotlib.transforms as transforms
import numpy as np
fichier = "dt3000"
output = "tup_python.png"
if __name__ == '__main__':
## Lecture du fichier
data = np.loadtxt(fichier)
tab1 = data[:, 0]
tab2 = data[:, 1]
## Recherche des indices des maximums
max_idx = np.where(tab2 == tab2.max())
for idx in max_idx[0]:
print('REPET MAXI = {} AVEC LA SOMME DE = {}'.format(tab2[idx], tab1[idx]))
axe_gaussienne = np.sum(tab1[max_idx[0]])/2.
print('Axe de la gaussienne: %s'%(axe_gaussienne))
## Figure
fig = plt.figure()
ax = fig.add_subplot(111)
## Transformation
trans = transforms.blended_transform_factory(ax.transData, ax.transAxes)
## Plot
plt.plot(tab1, tab2, 'r+', label=fichier)
## Grille et légende
plt.grid()
plt.legend(numpoints=1, frameon=False)
## Ligne verticale et texte
plt.axvline(x=axe_gaussienne, color='k', linewidth=1.5)
plt.text(axe_gaussienne, 1.01, "%g"%(axe_gaussienne), transform=trans, horizontalalignment='center')
## Légende des axes
plt.xlabel("Somme")
plt.ylabel("Répétition".decode('utf-8')) #decode est une astuce pour pouvoir utiliser des caractères accentués
## Sauvegarde et affichage
plt.savefig(output, bbox_inches='tight')
plt.show()
Dernière modification par elendil (Le 20/02/2013, à 16:23)
Hors ligne
#14 Le 20/02/2013, à 16:29
- bmzoom
Re : [RESOLU] Python et liste
Tout en 1 , c'est :
- graphe => sortie png_1
- calcul ( qq résultats ) => sortie png_2
- information + graphe => sortie png_3
Est ce que tu peux sortir 3 png différents avec le même script python ?
Je n'en suis pas encore là , mais intégrer du code latex dans png_2 , est ce faisable ?
Dernière modification par bmzoom (Le 20/02/2013, à 16:31)
Hors ligne
#15 Le 20/02/2013, à 16:43
- grim7reaper
Re : [RESOLU] Python et liste
Tu veux pas non plus 100 balles et 1 mars ?
Excuse-moi, mais je trouve ton attitude plutôt moyenne.
Tu demandes pas mal de truc, mais pas un seul merci ou s’il vous plaît depuis le début.
Et on ne te vois pas trop essayer de faire quoi que ce soit par toi-même.
Jpense que tu as déjà pas mal de piste, t’as plus qu’a te sortir les doigts et revenir si tu rencontres un problème.
Enfin, c’est mon humble avis.
Hors ligne
#16 Le 20/02/2013, à 16:44
- elendil
Re : [RESOLU] Python et liste
Tu veux pas non plus 100 balles et 1 mars ?
Excuse-moi, mais je trouve ton attitude plutôt moyenne.
Tu demandes pas mal de truc, mais pas un seul merci ou s’il vous plaît depuis le début.
Et on ne te vois pas trop essayer de faire quoi que ce soit par toi-même.
Jpense que tu as déjà pas mal de piste, t’as plus qu’a te sortir les doigts et revenir si tu rencontres un problème.Enfin, c’est mon humble avis.
Même avis ! Mais déjà dit ici au post #8 : http://forum.ubuntu-fr.org/viewtopic.php?id=1195131
Oui on peut toujours faire tout ce que l'on veut avec Python.
Le code que je t'ai donné est une bonne base.
Il n'est pas très compliqué et tu dois pouvoir le modifier à ta guise pour faire ce que tu veux avec.
Et oui tu peux faire 3 graphiques avec le même script. En fait tu en fait autant que tu veux.
Et oui tu peux ajouter du code LaTeX dans tes graphiques.
Par exemple pour la légende de l'axe X :
plt.xlabel(r"$\mathrm{Surface\ =} 4\pir^{2}$")
Jettes un oeil à la documentation de Matplotlib : http://matplotlib.org/index.html
Pour le LaTeX : http://matplotlib.org/users/usetex.html
Dernière modification par elendil (Le 20/02/2013, à 16:48)
Hors ligne
#17 Le 20/02/2013, à 16:56
- bmzoom
Re : [RESOLU] Python et liste
Enfin, c’est mon humble avis.
Non , c'est pas l'avis d'un humble , mais d'un naze qui veut jouer
---------
Ça , c'est de l'humilité
Est ce que tu peux sortir 3 png différents avec le même script python ?
Je n'en suis pas encore là , mais intégrer du code latex dans png_2 , est ce faisable ?
Hors ligne
#18 Le 20/02/2013, à 16:57
- grim7reaper
Hors ligne
#19 Le 20/02/2013, à 16:59
- bmzoom
Re : [RESOLU] Python et liste
Exact , voit d'abord , à qui tu veux montrer ta science
Casse toi , tu pue !
Hors ligne
#20 Le 20/02/2013, à 17:09
- elendil
Re : [RESOLU] Python et liste
Ok, je vois le genre…
À l’avenir j’éviterais tes sujets
Bon vent.
Idem !
Une fois ne m'a pas servi de leçon mais là j'ai compris !
@bmzoom
Je jette l'éponge devant tant d'impolitesse et de mauvaise volonté de ta part.
Hors ligne
#21 Le 20/02/2013, à 17:12
- bmzoom
Re : [RESOLU] Python et liste
Le modérateur jugera qui vient casser les pieds
Qui est celui qui n'est pas correct
Hors ligne
#22 Le 20/02/2013, à 17:25
- nesthib
Re : [RESOLU] Python et liste
@grim7reaper : un peu de tact, même si tu as raison sur le fond.
@bmzoom : on se calme, je te rappelle que ce sont des bénévoles qui te répondent, et effectivement un « merci » de temps en temps ne fait pas de mal. Quant à en venir à l'agression ceci ne sera pas toléré. Considère-le comme un avertissement.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#23 Le 20/02/2013, à 17:45
- bmzoom
Re : [RESOLU] Python et liste
Le bénévolat est une activité non rétribuée et librement choisie qui s’exerce en général au sein d’une institution sans but lucratif (ISBL) : association, ONG, syndicat ou structure publique. Celui ou celle qui s’adonne au bénévolat est appelé « bénévole ». L’étymologie du mot vient du latin « benevolus » qui signifie « bonne volonté ».
Le mec qui dis , à un autre , maintenant cela suffit , " n'est pas un bénévole "
Hors ligne
#24 Le 20/02/2013, à 17:53
- nesthib
Re : [RESOLU] Python et liste
@bmzoom : je ne suis pas d'accord et de toute façon cela ne change rien au problème, maintenant je te renvoie vers les règles du forum, si tu n'es pas d'accord avec la décision de modération → mailto:moderateurs [at] ubuntu-fr [point] org
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#25 Le 20/02/2013, à 17:58
- bmzoom
Re : [RESOLU] Python et liste
Un prêtre-modérateur est un prêtre en charge d'une équipe pastorale
Un couvent modérateur est en charge de modératrices
Hors ligne