acceler le parcour de mon tableau

acceler le parcour de mon tableau - Java - Programmation

Marsh Posté le 03-04-2007 à 20:46:07    


Salut,  
j'ai une image dont j'ai récupéré la valeur de chaque pixel que j'ai stocké dans un tableau. Le probleme est que quand je procede à des modifications; une image 64x64 comprend 4096 pixels et à parcourir, cela met quelques secondes mais pour une image 640x480, la ça se compte en minutes, voir en heures.
Quelqu'un a t'il une solution???

Reply

Marsh Posté le 03-04-2007 à 20:46:07   

Reply

Marsh Posté le 03-04-2007 à 20:59:07    

Tu dois faire quoi avec cette image ?

Reply

Marsh Posté le 03-04-2007 à 21:12:49    

le phasme \o/

Reply

Marsh Posté le 03-04-2007 à 21:15:27    

it's me \o/

Reply

Marsh Posté le 03-04-2007 à 21:15:51    

il parait que je vois ta copine vendredi [:naughty]

Reply

Marsh Posté le 03-04-2007 à 21:17:22    

Ca, c'était avant qu'elle prenne congé ce matin je crois :o

Reply

Marsh Posté le 03-04-2007 à 21:21:03    

[:gratgrat]
je suis pas sur de saisir le rapport :D


Message édité par the real moins moins le 03-04-2007 à 21:21:09
Reply

Marsh Posté le 03-04-2007 à 21:30:02    

bah ce matin elle a pris congé pour vendredi :D


Message édité par LePhasme le 03-04-2007 à 21:30:17
Reply

Marsh Posté le 03-04-2007 à 21:42:48    

:pfff:

Reply

Marsh Posté le 03-04-2007 à 22:27:27    

je dois faire de la binarisation.

Reply

Marsh Posté le 03-04-2007 à 22:27:27   

Reply

Marsh Posté le 03-04-2007 à 22:58:39    

Funkyfonk a écrit :

Salut,
j'ai une image dont j'ai récupéré la valeur de chaque pixel que j'ai stocké dans un tableau. Le probleme est que quand je procede à des modifications; une image 64x64 comprend 4096 pixels et à parcourir, cela met quelques secondes mais pour une image 640x480, la ça se compte en minutes, voir en heures.
Quelqu'un a t'il une solution???


comment veux tu avoir le moindre embryon de réponse si tu ne fournis pas de code ?

 

le phasme & greg >> MP svp, si c'est pas déja fait :o


Message édité par Harkonnen le 03-04-2007 à 22:59:06
Reply

Marsh Posté le 04-04-2007 à 08:58:37    

Plus besoin on avait fini de discuter :o

Reply

Marsh Posté le 04-04-2007 à 09:36:25    

je ne vois pas bien quel code tu veux que je fournisse?? je fais un getPixel pour obtenir la valeur d'un pixel. Je rentre toutes ces valeurs dans un tableau de la taille de l'image et je fais une boucle qui modifie chaque pixel.

Reply

Marsh Posté le 04-04-2007 à 09:40:06    

à ton avis... ? [:alfone]
si c'est ta boucle qui déconne, ça serait ptet bien de fournir le code de ladite boucle non ? :o

Reply

Marsh Posté le 04-04-2007 à 09:46:42    

J'ai dit nullpart qu'une boucle déconne. Cest une simple boucle for et elle fonctionne puisque l'opération s'effectue. Le probleme est plutot de savoir si il y aurait une technique ou méthodes ou autres dans la librairie standart pour accélerer le déroulement d'une boucle ou le parcours de mon image.
 
Dis puisque tu es modo, comment je peux dégager les pollueurs de mon poste comme Phase et real moins moin?

Message cité 1 fois
Message édité par Funkyfonk le 04-04-2007 à 09:51:05
Reply

Marsh Posté le 04-04-2007 à 09:59:11    

Donne ton code quand même qu'on voit ou on pourrait améliorer les choses.
Ca me semble long les temps que tu donnes surtout si tu dis une heure pour à peine 300k itérations.

Reply

Marsh Posté le 04-04-2007 à 10:08:07    

Funkyfonk a écrit :

J'ai dit nullpart qu'une boucle déconne. Cest une simple boucle for et elle fonctionne puisque l'opération s'effectue. Le probleme est plutot de savoir si il y aurait une technique ou méthodes ou autres dans la librairie standart pour accélerer le déroulement d'une boucle ou le parcours de mon image.


fais le compte : 640*480 = 307200 itérations... une heure pour 307200 itérations, c'est énorme ! donc y'a un souci dans ton code.
 

Funkyfonk a écrit :


Dis puisque tu es modo, comment je peux dégager les pollueurs de mon poste comme Phase et real moins moin?


tu peux pas. et c'est bon, ils ont fini de discuter, je vais pas les bannir pour ça, faut pas éxagérer non plus. si tu pouvais arréter de m'envoyer des demandes de modération pour que je les sorte, ça me saurai gré :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 04-04-2007 à 10:22:32    

Voila ce que dit "The real moins moins" dans le post à coté du miens, je crois que ça mérite au moins un avertissement, je cite:"t'es pas non plus obligé de te sentir agressé et d'etre aggressif en retour parce que je critique tes methodes de merde hein" Je crois que c'est ton boulot de modo de sanctionner les troubles faits.
 
Mon code, c 'est une simple boucle de base. Je ne vois pas ce qu'il y a de plus à comprendre. Elle fonctionne parfaitement. Ma question c'est de savoir si il existe un moyen plus rapide de parcourrir l'image qu'une boucle for.

Message cité 1 fois
Message édité par Funkyfonk le 04-04-2007 à 10:23:20
Reply

Marsh Posté le 04-04-2007 à 10:56:56    

Funkyfonk a écrit :

Voila ce que dit "The real moins moins" dans le post à coté du miens, je crois que ça mérite au moins un avertissement, je cite:"t'es pas non plus obligé de te sentir agressé et d'etre aggressif en retour parce que je critique tes methodes de merde hein" Je crois que c'est ton boulot de modo de sanctionner les troubles faits.


1. Je ne vois pas de quel post tu me parles, ni d'ou tu le sors
2. Je pense être assez grand pour juger qui doit être sanctionné ou pas
3. on écrit trouble-fête
 

Funkyfonk a écrit :


Mon code, c 'est une simple boucle de base. Je ne vois pas ce qu'il y a de plus à comprendre. Elle fonctionne parfaitement. Ma question c'est de savoir si il existe un moyen plus rapide de parcourrir l'image qu'une boucle for.


La question n'est pas de savoir s'il y a un moyen plus rapide ou pas... Une boucle for qui prend une heure pour faire 307200 itérations, on n'a jamais vu ça...
Un exemple : une boucle Python qui fait la somme des 307200 premiers nombres :

Code :
  1. >>> def test():
  2.     j=0
  3.     for i in range (0,307199):
  4.         j += i
  5.     print j


et un coup de profiler :

Code :
  1. >>> cProfile.run(test())
  2. 47185459201
  3.         1 function calls in 0.000 CPU seconds


OK ? Donc ta boucle est foireuse, et tant que tu seras persuadé du contraire et que tu refuseras de poster le code, tu n'avanceras pas et nous non plus.

Reply

Marsh Posté le 04-04-2007 à 12:01:28    

1) désolé pour mes fautes d'orthographe, bien que je sois d'origine etrangere et qu'on parle généralement sur un forum avec des abréviations.  
 
2)Je crois que tu devrais savoir que le langage python utilise des mécanisme de bas niveau est utilisé sur la pluspart des supercalculateurs et pas JAVA. Ce sont deux langages qui ont chacun leur spécificité d'ou ta boucle en python qui comme de l'assembleur se déroule avec une rapidité "inégalable", pas en java lol
 
De plus, il va de soit que puisque je travaille sur une image, je fais un buffering debuffering et inversement...car j'utilise getPixel.

Message cité 3 fois
Message édité par Funkyfonk le 04-04-2007 à 12:04:56
Reply

Marsh Posté le 04-04-2007 à 12:02:13    

skoi s'bordel ici ?

Reply

Marsh Posté le 04-04-2007 à 12:02:43    


putain joyeux anniversaire moinsmoins [:trompette5]

Reply

Marsh Posté le 04-04-2007 à 12:05:03    

Je ne suis pas certain que la boucle soit si foireuse que ça.
 
Je ne sais pas ce que ça donne en Java, mais en C#, GetPixel est une usine à gaz monstrueuse. Ca se solde par une recopie complète de l'ensemble de l'image dans une nouvelle zone mémoire, avec une conversion en bitmap à la clé.
 
Donc c'est 300k² boucles qui sont effectuées, au très grand minimum.
Je m'étais amusé à faire un programme qui pixelisait une image, et idem, c'était une horreur absolue tant que je passais par GetPixel.
 
En C#, on peut accéder directement, via méthodes non protégées, à l'espace mémoire système où se situe l'image. C'est à partir de là qu'il faut travailler quand on a des traîtements à effectuer dessus.
Le mieux restant tout de même de voir si les librairies graphiques intégrées ne font pas déjà ce qu'on veut, ça évite de coder comme un porc. (surtout que travailler avec du code non managé en Java, à mon avis ça doit pas être super top, si du moins c'est possible)

Reply

Marsh Posté le 04-04-2007 à 12:11:02    

Funkyfonk a écrit :

1) désolé pour mes fautes d'orthographe, bien que je sois d'origine etrangere et qu'on parle généralement sur un forum avec des abréviations.  
 
2)Je crois que tu devrais savoir que le langage python utilise des mécanisme de bas niveau est utilisé sur la pluspart des supercalculateurs et pas JAVA. Ce sont deux langages qui ont chacun leur spécificité d'ou ta boucle en python qui comme de l'assembleur se déroule avec une rapidité "inégalable", pas en java lol


 
Haha!! Ce qu'il faut pas lire!!! :D
 
Tu te rends compte de ce que t'écris, au moins???
Pour que ça dure "des heures", comme tu le dit (déjà, combien de temps ça prend, ton machin, précisément?), soit, effectivement, ta boucle est mal écrite, soit l'opération que tu fais dans le corps de la boucle est longue par nature, et c'est pour ça que ça prends du temps.
Sinon, non, parcourir tous les pixels d'une image, pour faire une opération dessus, ben ça se fait un par un, à priori.
A la limite, tu peux amélorer les choses en stockant les résultats calculés pour ne pas avoir à les recalculer pour les pixels de même valeur, mais si ton traitement est simple, leremède sera peut être pire que le mal.
 
Sinon, pour info, la même boucle que celle de Harko en Java prend 208 secondes en écrivant i à chaque itération sur stdout, et 0 secondes [:peur] sans rien écrire.
 
Et j'ai pas de supercalculateur  [:doc petrus]  
 
Maintenant, espérer de l'aide sans code, c'est un peu gonflé.

Reply

Marsh Posté le 04-04-2007 à 12:18:00    

Funkyfonk a écrit :

2)Je crois que tu devrais savoir que le langage python utilise des mécanisme de bas niveau est utilisé sur la pluspart des supercalculateurs et pas JAVA. Ce sont deux langages qui ont chacun leur spécificité d'ou ta boucle en python qui comme de l'assembleur se déroule avec une rapidité "inégalable", pas en java lol


[:rofl]
 
J'ose espérer que c'est une plaisanterie [:rofl]
 
Mais la prochaine fois évite de parler de trucs dont tu n'as pas la moindre idée [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 04-04-2007 à 12:18:46    

Funkyfonk a écrit :

1) désolé pour mes fautes d'orthographe, bien que je sois d'origine etrangere et qu'on parle généralement sur un forum avec des abréviations.  


Perdu... Sur un forum, on n'a pas de contrainte de nombre de caractères, de longueur de message, de prix de communication, etc... comme on a avec les SMS. Donc on écrit correctement par respect pour ceux qui lisent et qui répondent.
 

Funkyfonk a écrit :


2)Je crois que tu devrais savoir que le langage python utilise des mécanisme de bas niveau est utilisé sur la pluspart des supercalculateurs et pas JAVA. Ce sont deux langages qui ont chacun leur spécificité d'ou ta boucle en python qui comme de l'assembleur se déroule avec une rapidité "inégalable", pas en java lol


Ca c'est la meilleure de l'année... Python aussi rapide que l'assembleur, on aura tout vu... Je vois mal comment un langage interprété, qui est donc une surcouche programmée en C, lui même une surcouche au dessus de l'assembleur, pourrait être plus rapide que de l'assembleur pur... Quant à la rapidité de Python/Java, là encore c'est du flan...Je ne vois pas comment une boucle qui ne prend quasiment aucun temps d'éxécution en Python pourrait prendre une heure en Java...
 

MagicBuzz a écrit :

Je ne suis pas certain que la boucle soit si foireuse que ça.(...)


Oui, c'est clair que GetPixel est moisi... C'est clair qu'il aurait plutôt intéret à passer par un truc genre JSDL par exemple, mais tant qu'il postera pas de code, on ne fera que des supputations et rien d'autre.

Reply

Marsh Posté le 04-04-2007 à 12:21:06    

gfive a écrit :

Haha!! Ce qu'il faut pas lire!!! :D
 
Tu te rends compte de ce que t'écris, au moins???
Pour que ça dure "des heures", comme tu le dit (déjà, combien de temps ça prend, ton machin, précisément?), soit, effectivement, ta boucle est mal écrite, soit l'opération que tu fais dans le corps de la boucle est longue par nature, et c'est pour ça que ça prends du temps.
Sinon, non, parcourir tous les pixels d'une image, pour faire une opération dessus, ben ça se fait un par un, à priori.
A la limite, tu peux amélorer les choses en stockant les résultats calculés pour ne pas avoir à les recalculer pour les pixels de même valeur, mais si ton traitement est simple, leremède sera peut être pire que le mal.
 
Sinon, pour info, la même boucle que celle de Harko en Java prend 208 secondes en écrivant i à chaque itération sur stdout, et 0 secondes [:peur] sans rien écrire.
 
Et j'ai pas de supercalculateur  [:doc petrus]  
 
Maintenant, espérer de l'aide sans code, c'est un peu gonflé.


 
Comme tu dis, j'ai écrit au dessus :
je travaille sur une image, je fais un buffering debuffering et inversement...car j'utilise getPixel. Il y a donc un traitement en plus de la boucle. Est ce possible de le faire en python.
 
L'opération que je fais dans le corps de la boucle est longue par nature. Il y a des librairies qui permettent d'accelerer le processus mais je dois utiliser la librairie standart, c est une contrainte.
 
Masklinn explicite stp au lieu de lancer des réflections. Si tu sais les choses, dit les et corriges moi.

Message cité 2 fois
Message édité par Funkyfonk le 04-04-2007 à 12:27:39
Reply

Marsh Posté le 04-04-2007 à 12:25:03    

Funkyfonk a écrit :


L'opération que je fais dans le corps de la boucle est longue par nature. Il y a des librairies qui permettent d'accelerer le processus mais je dois utiliser la librairie standart, c est une contrainte.


Mais tu attends quoi pour poster le code de ce traitement bon dieu ?? Il est bien évident que c'est lui qui te ralentit, donc plutot que de tergiverser, poste donc ce code pour qu'on voit s'il y a moyen de l'optimiser, c'est quand même pas dur à comprendre bordel de merde !

Reply

Marsh Posté le 04-04-2007 à 12:28:09    

Funkyfonk a écrit :

Comme tu dis, j'ai écrit au dessus :
je travaille sur une image, je fais un buffering debuffering et inversement...car j'utilise getPixel.
 
L'opération que je fais dans le corps de la boucle est longue par nature. Il y a des librairies qui permettent d'accelerer le processus mais je dois utiliser la librairie standart, c est une contrainte.


Super [:bien]
 
À la 10e réponse du topic Harko t'a demandé un bout de code histoire qu'on puisse comprendre ce dont tu parles, parce que le forum ne nous a pas encore payé de boule de cristal, mais non a pas encore vu la queue d'une ligne de code.

Funkyfonk a écrit :

Maskin explicite stp.


Il n'y a rien à expliciter, Python est un langage interprété sans JIT extrèmement lent sur les calculs numériques comparés à Java: http://shootout.alioth.debian.org/ [...] lang2=java
 
Donc tu racontes n'imp [:spamafote]  
 
D'ailleurs même en utilisant Psyco (le JIT pluggable Python), Python se fait fesser en vitesse de calcul pure http://shootout.alioth.debian.org/ [...] ang2=java5


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 04-04-2007 à 12:54:40    

Pour la vitesse, Je ne suis pas un expert du python mais comme j'ai supposé que puisqu'il est tout de même utilisé sur les supercalculateurs et utilise des meca de bas niveau, s'en était peut être la raison... mais apparemment non.  
 
Pour ce qui est de python et de l'assembleur, c'était juste une métaphore pour exprimer la vitesse d'execution par rapport au langage java.
 
Je vais me documenter sur JSDL et voir les point fort de python.
merci pour la page des benchmark, super cool.
Je poste le code ce soir quand je rentre...

Message cité 1 fois
Message édité par Funkyfonk le 04-04-2007 à 12:58:15
Reply

Marsh Posté le 04-04-2007 à 13:01:36    

Funkyfonk a écrit :

Pour la vitesse, Je ne suis pas un expert du python mais comme j'ai supposé que puisqu'il est tout de même utilisé sur les supercalculateurs et utilise des meca de bas niveau


Python n'utilise pas plus de "mécas de bas niveau" que Java, il donne plus facilement accès au système et au métal que Java mais ça n'a aucun rapport [:pingouino]

Funkyfonk a écrit :

Pour ce qui est de python et de l'assembleur, c'était juste une métaphore pour exprimer la vitesse d'execution par rapport au langage java.


Ca reste n'importe quoi, puisque le python est notablement plus lent que Java sur la JVM de Sun [:spamafote]  


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 04-04-2007 à 13:44:46    

exact, apres verification, j 'avais mal lu, eloigné des meca bas niveau malgré tout utilisé sur des supercalculateurs.non?. D'ou ma supositions...
 
Pour ce qui est de la vitesse, je veux dire entre l'assembleur et java puisque comme tu l'as montré, ce n'est pas le cas pour python.

Reply

Marsh Posté le 04-04-2007 à 13:45:45    

c'est ici la fete ? [:max evans]

Reply

Marsh Posté le 04-04-2007 à 13:51:57    

oui, soit le bienvenu

Reply

Marsh Posté le 04-04-2007 à 13:54:38    

merci [:shay]

Reply

Marsh Posté le 04-04-2007 à 14:04:19    

Welcome to SUN TECH WAR

Reply

Marsh Posté le 04-04-2007 à 14:05:51    

Je suis ni pour ni contre le parcours d'un tableau.

Reply

Marsh Posté le 04-04-2007 à 14:07:15    

Votez pour Harko ! [:shay]

Reply

Marsh Posté le 04-04-2007 à 14:10:48    

tien, peut etre que ca permettra de calmer la tention, un moment de détente lol  
http://www.youtube.com/watch?v=5Z4YFRQf9rE

Reply

Marsh Posté le 04-04-2007 à 14:22:16    

Je peux pas voir les videos du boulot :o

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed