Brzina Pythona 3.5

poruka: 20
|
čitano: 1.722
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
10 godina
neaktivan
offline
Brzina Pythona 3.5
Poz, znam da je Python spor, ali ne znam koliko jer nemam gotovo nikakvog iskustva u programiranju.
Naime, danas sam isprogramirao crtanje Mandelbrotovog seta u pythonu (prilicno je sporo) na laptopu. Sad, to je prilicno komplicirano racunanje pa me zanima kolika bi bila razlika ako prebacim crtanje na pc sa i5 4690k, tj. je li sporo zbog Pythona (i moje lose optimizacije) ili je pak mozda do laptopovog procesora (ivy bridge i7) koji je nesto stariji. Opet, programiramo samo u skoli (mioc) pa nemam nikakvog iskustva ni u iptimizaciji ni u bilo kakvom drugom jeziku osim nesto sitno Jave.
Hvala :)
 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Brzina Pythona 3.5
fpozar kaže...
Poz, znam da je Python spor, ali ne znam koliko jer nemam gotovo nikakvog iskustva u programiranju.
Naime, danas sam isprogramirao crtanje Mandelbrotovog seta u pythonu (prilicno je sporo) na laptopu. Sad, to je prilicno komplicirano racunanje pa me zanima kolika bi bila razlika ako prebacim crtanje na pc sa i5 4690k, tj. je li sporo zbog Pythona (i moje lose optimizacije) ili je pak mozda do laptopovog procesora (ivy bridge i7) koji je nesto stariji. Opet, programiramo samo u skoli (mioc) pa nemam nikakvog iskustva ni u iptimizaciji ni u bilo kakvom drugom jeziku osim nesto sitno Jave.
Hvala :)

Python je spor i tu nema dileme. Ako je taj i5 brzi od tvojeg sadasnjeg procesora, bit ce sigurno i crtanje brze.

 

Takoder, ovisi na koji nacin to crtas, ako stavis kod ovdje mozda ti mogu reci gdje bi mogao dobiti na brzini.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
11 godina
neaktivan
offline
Re: Brzina Pythona 3.5

U prosjeku Python je 5x sporiji nego C++ no moze biti cak do 15-20x, no to ne znaci da je los jezik posto u vrlo malo algoritama je potrebna velika brzina jer nisu toliko kompleksni. Meni crta Mandelbrota za 3.7s, sta je sasvim solidno. Ako ti je potrebna veca brzina onda predji na C++, i mozes onda bindat kod u Pythonu sa onim u C++.

Poruka je uređivana zadnji put čet 2.6.2016 22:32 (tLeon).
10 godina
neaktivan
offline
Re: Brzina Pythona 3.5
Kaaaaaaaj?!?!
Hahaha meni je crtao pola sata 1x1 dimenziju sa 25 provjera.
Wow, fakat je kritican moj program, nisam pri kodu jer saljem s mobitela, ali ne bih htio da mi drugi rijesavaju problem, samo da me upute :)
Ugl, probao sam na kompu i cinilo mi se brze al je problem sto mi je u upotrebi svega 3% procesora.
Morat cu naci nacin da iskoristim sve jezgre i ucinim ga "pametnijim"
 
0 0 hvala 1
17 godina
neaktivan
offline
Re: Brzina Pythona 3.5
fpozar kaže...
Kaaaaaaaj?!?!
Hahaha meni je crtao pola sata 1x1 dimenziju sa 25 provjera.
Wow, fakat je kritican moj program, nisam pri kodu jer saljem s mobitela, ali ne bih htio da mi drugi rijesavaju problem, samo da me upute :)
Ugl, probao sam na kompu i cinilo mi se brze al je problem sto mi je u upotrebi svega 3% procesora.
Morat cu naci nacin da iskoristim sve jezgre i ucinim ga "pametnijim"

Normalno da ti necu rijesiti, medutim, ako mozes staviti kod, stavi ga tako da te uputimo sto da promijenis.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
Poruka je uređivana zadnji put čet 2.6.2016 23:12 (1domagoj1).
10 godina
neaktivan
offline
Re: Brzina Pythona 3.5
Moze, sutra ili preksutra kad dodem do kompa opet vam posaljem.
Hvala puno :)
 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Brzina Pythona 3.5
fpozar kaže...
Moze, sutra ili preksutra kad dodem do kompa opet vam posaljem.
Hvala puno :)

Jedno pitanje, s cim crtas (tkinter, nesto drugo?) i crtas li piksel po piksel?

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
Poruka je uređivana zadnji put čet 2.6.2016 23:13 (1domagoj1).
10 godina
neaktivan
offline
Re: Brzina Pythona 3.5
Crtam turtle grafikom piksel po piksel jer je to jedino sto sam naso u knjizi.
 
0 0 hvala 0
11 godina
neaktivan
offline
Re: Brzina Pythona 3.5
fpozar kaže...
Crtam turtle grafikom piksel po piksel jer je to jedino sto sam naso u knjizi.

 Mislim da imas i Tkinter obradjen u 2. knjizi ali nisam 100% siguran

17 godina
neaktivan
offline
Re: Brzina Pythona 3.5
fpozar kaže...
Crtam turtle grafikom piksel po piksel jer je to jedino sto sam naso u knjizi.

Da, to ti je jedan od problema. Trebao bi prvo izracunati cijeli redak piksela ili cak cijelu matricu piksela i onda tek taj cijeli redak ili matricu crtati. Takoder, uzmi u obzir i simetricnost fraktala, pa i tu mozes skratiti vrijeme racunanja.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
10 godina
neaktivan
offline
Re: Brzina Pythona 3.5
Zanimljivo, a za simetričnost fraktala je jako teško, sumnjam da mogu tu nešto ubrzati jer je fora kod ovog što nije baš potpuno simetrično kaj ne?
Ovo s matricom mi de sviđa, probat ću to implementirat
 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Brzina Pythona 3.5
fpozar kaže...
Zanimljivo, a za simetričnost fraktala je jako teško, sumnjam da mogu tu nešto ubrzati jer je fora kod ovog što nije baš potpuno simetrično kaj ne?
Ovo s matricom mi de sviđa, probat ću to implementirat

Sto se simetrije tice, pogledaj ovdje.

 

Sto se samog koda tice, probaj koristiti i numpy. Kakva ti je funkcija za Mandelbrota, mozes li staviti kod? Nesto ovako?

def mandelbrot(c,maxiter):
   z = c
   for n in range(maxiter):
       if abs(z) > 2:
           return n
       z = z*z + c
   return 0

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
Poruka je uređivana zadnji put pet 3.6.2016 11:57 (1domagoj1).
10 godina
neaktivan
offline
Brzina Pythona 3.5

#Mandelbrotov set crtanje
from turtle import*
print('crtanje je kvadratno ')
#pocetak_x=float(input('Unesi početak intervala za realni dio '))
#kraj_x=float(input('Unesi kraj intervala za realni dio '))
#pocetak_y=float(input('Unesi početak intervala za imaginarni dio '))
#kraj_y=float(input('Unesi kraj intervala za imaginarni dio '))

dimenzija=float(input('Unesi dimenziju kvadratnog crtanja seta '))
gustoca=int(input('Unesi gustocu crtanja '))
provjera=int(input('Unesi broj provjera za svaki broj '))
def funkcija(x,y):
realni=x
imaginarni=y
c_realni=x
c_imaginarni=y
broj_provjera=1
rezultat=(realni**2 + imaginarni**2)**(1/2)
da_il_ne=0
if rezultat<2:
while broj_provjera<provjera and rezultat<2:
privremena=realni
privremena2=imaginarni
realni=privremena**2 - privremena2**2 + c_realni
imaginarni= 2*privremena*privremena2 + c_imaginarni
rezultat = ((realni)**2 + (imaginarni)**2)**(1/2)
broj_provjera= broj_provjera+1
else:
da_il_ne=0
if rezultat<2:
da_il_ne=1
else:
da_il_ne=0
c=[broj_provjera, da_il_ne]
return(c)
#neke provjere

#print('provjera za 0,i ',funkcija(0,1)[1])
#print('provjera za 0,0.3i ',funkcija(0,0.3)[1])


#crtanje, pomice crtez od sredista ekrana
#ht()
lt(90)
pu()
fd (100)
lt(90)
fd(100)
rt(180)
pd()

#razmak_x = (kraj_x-pocetak_x)/gustoca
#razmak_y = (kraj_y-pocetak_y)/gustoca
#neki_y=pocetak_y
#gustoca_y=(kraj_y-pocetak_y)*200
#gustoca_x=2

razmak_x = 2*dimenzija/gustoca
razmak_y= 2*dimenzija/gustoca
neki_x=-dimenzija
neki_y=dimenzija

for i in range (2*gustoca):
neki_x = -dimenzija
for j in range(2*gustoca):
if funkcija(neki_x,neki_y)[1]==1:
dot(2)
neki_x=neki_x+razmak_x
pu()
fd(1)
pd()
neki_y=neki_y-razmak_y
pu()
back(gustoca*2)
rt(90)
fd(1)
lt(90)
pd()

 

 

 

 

 

 

 

 

 

 

 

 

 

 
0 0 hvala 0
10 godina
neaktivan
offline
Re: Brzina Pythona 3.5

Evo, poslao sam kod, nisam znao da Python zna radit s kompleksnim brojevima

17 godina
neaktivan
offline
Re: Brzina Pythona 3.5
fpozar kaže...

Evo, poslao sam kod, nisam znao da Python zna radit s kompleksnim brojevima

Naravno da zna. Je da je spor, al je zato svicarski nozic. Najbolji je.

 

Nego, daj formatiraj taj kod malo, imas na alatnoj traci format "Kod" pa onda napisi kod ovako kako sam ja u prijasnjem postu. Pogotovo jer je kod Pythona uvlacenje najbitnije.

EDIT: Ili jos bolje, stavi ga na pastebin.com pa ovdje samo link kopiraj.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
Poruka je uređivana zadnji put sub 4.6.2016 17:17 (1domagoj1).
10 godina
neaktivan
offline
Brzina Pythona 3.5

http://pastebin.com/CEn9Bztp

Ovo je super, fakat nisam znao da python zna radit sa kompleksnim brojevima. ovo mijenja sve

 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Brzina Pythona 3.5
fpozar kaže...

http://pastebin.com/CEn9Bztp

Ovo je super, fakat nisam znao da python zna radit sa kompleksnim brojevima. ovo mijenja sve

Evo jedan savjet.

x * x

je jedno 10-ak puta brze od:

x ** 2

Tu mozes dobiti nesto brzine jer vidim da puno kvadriranja radis. Mislim cak da je za korijen math.sqrt() (koji se linka na C sqrt() funkciju) nesto brzi od **(1/2). Probaj.

Jos jedna stvar koji bi mogao napraviti da ubrzas kod je koristiti JIT kompajler, poput Numbe. Kratak primjer kako to izgleda u Pythonu:

from numba import jit

@jit
def fja(x):
    # radi neku tesku matematiku s x
    return rez

Ovo podebljano @jit je vazno, taj dekorator stavis iznad svake funkcije koju zelis da Numba kompajlira u nativne strojne instrukcije. To bi trebalo drasticno ubrzati stvari. Uz ono sto sam ti rekao vec prije sto se tice iscrtavanja, nikako ne piksel po piksel jer to trosi puno resursa. Bolje je unaprijed izracunati veci komad (liniju, stupac ili manju matricu) i onda to prikazati.


Takoder, opcenito savjet, pisi prozracniji kod. Ovo je sve natiskano i tesko citljivo. Stavljaj razmake oko znaka '=', osim u pozivu funkcije, dakle:

realni = x
# a ne
realni=x

Medutim, u pozivu funkcije:

fja(neki_parametar=x)
# a ne
fja(neki_parametar = x)

Za vise o tome kako pisati Python kod pogledaj PEP 8.


Neke druge savjete u principu vise nemam, nadam se da ce ti ovo pomoci.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
10 godina
neaktivan
offline
Brzina Pythona 3.5

Hvala ti puno, a znaš li možda gdje mogu učiti kako optimizirati za quad core procesore. Na ovom primjeru specifično sam mislio 4 kornjače od jednom stavit koje rade zajedno.

 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Brzina Pythona 3.5
fpozar kaže...

Hvala ti puno, a znaš li možda gdje mogu učiti kako optimizirati za quad core procesore. Na ovom primjeru specifično sam mislio 4 kornjače od jednom stavit koje rade zajedno.

To ti je paralelizacija algoritama i to je prilicno zeznuta stvar. Mislim da ti je to ipak prevelik zalogaj zasad (kazes da si jos srednja skola, znaci tek pocinjes).

 

No ako bas zelis i inzistiras: za paralelizam pogledaj Pythonovu dokumentaciju o dretvamaprocesimameduprocesnom komunikacijom (linkovi su za Python 3, ako koristis Python 2, lijevo gore ga odaberi). Potrazi na netu i MPI (Message Passing Interface), Python paket je mpi4py. Potrazi neke radove na temu paralelnog Mandelbrota, poput ovoga. Ako nista od ovoga ne kuzis, apsolutno je u redu, nemoj misliti da si glup jer stvarno nije trivijalno.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
10 godina
neaktivan
offline
Re: Brzina Pythona 3.5
Hvala još jednom na pomoći, sad imam materijala kad će mi bit dosadno :)
 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice