Programmering

Julia vs. Python: Hvilket er bedst for datavidenskab?

Blandt de mange brugssager, som Python dækker, er dataanalyse måske den største og mest betydningsfulde. Python-økosystemet er fyldt med biblioteker, værktøjer og applikationer, der gør arbejdet med videnskabelig databehandling og dataanalyse hurtigt og praktisk.

Men for udviklerne bag Julia-sproget - specifikt rettet mod "videnskabelig computing, maskinindlæring, data mining, storskala lineær algebra, distribueret og parallel computing" -Python er ikke hurtig eller praktisk nok. Julia sigter mod at give forskere og dataanalytikere ikke kun hurtig og bekvem udvikling, men også brændende eksekveringshastighed.

Hvad er Julia-sproget?

Julia blev oprettet i 2009 af et team på fire personer og afsløret for offentligheden i 2012 og er beregnet til at løse manglerne i Python og andre sprog og applikationer, der bruges til videnskabelig databehandling og databehandling. ”Vi er grådige,” skrev de. De ønskede mere:

Vi vil have et open source-sprog med en liberal licens. Vi vil have hastigheden på C med dynamikken i Ruby. Vi ønsker et sprog, der er homoikonisk, med ægte makroer som Lisp, men med indlysende, velkendt matematisk notation som Matlab. Vi vil have noget så anvendeligt til generel programmering som Python, så let for statistik som R, så naturligt til strengbehandling som Perl, så kraftigt til lineær algebra som Matlab, så godt til at lime programmer sammen som skallen. Noget, der er let at lære snavs, men alligevel holder de mest alvorlige hackere glade. Vi vil have det interaktivt, og vi vil have det samlet.

(Nævnte vi, at det skulle være så hurtigt som C?)

Her er nogle af måder, hvorpå Julia gennemfører disse ambitioner:

  • Julia er kompileret, ikke fortolket. For hurtigere ydelse af runtime er Julia just-in-time (JIT) kompileret ved hjælp af LLVM-compiler-rammen. Når det er bedst, kan Julia nærme sig eller matche hastigheden på C.
  • Julia er interaktiv. Julia inkluderer en REPL (read-eval-print loop) eller en interaktiv kommandolinje svarende til hvad Python tilbyder. Hurtige engangs-scripts og kommandoer kan stanses lige ind.
  • Julia har en ligetil syntaks. Julias syntaks svarer til Pythons - kortfattet, men også udtryksfuld og kraftfuld.
  • Julia kombinerer fordelene ved dynamisk skrivning og statisk skrivning. Du kan specificere typer for variabler, f.eks. "Usigneret 32-bit heltal." Men du kan også oprette hierarkier af typer for at tillade generelle tilfælde til håndtering af variabler af bestemte typer - for eksempel for at skrive en funktion, der accepterer heltal uden at angive længden eller underskrivelsen af ​​heltalet. Du kan endda gøre uden at skrive helt, hvis det ikke er nødvendigt i en bestemt sammenhæng.
  • Julia kan ringe til Python, C og Fortran biblioteker. Julia kan interface direkte med eksterne biblioteker skrevet i C og Fortran. Det er også muligt at grænseflade med Python-kode ved hjælp af PyCall-biblioteket og endda dele data mellem Python og Julia.
  • Julia understøtter metaprogrammering. Julia-programmer kan generere andre Julia-programmer og endda ændre deres egen kode på en måde, der minder om sprog som Lisp.
  • Julia har en fuldt udstyret debugger. Julia 1.1 introducerede en fejlretningssuite, der udfører kode i en lokal REPL og giver dig mulighed for at gå gennem resultaterne, inspicere variabler og tilføje breakpoints i kode. Du kan endda udføre finkornede opgaver som at gå gennem en funktion genereret af kode.

Relateret video: Hvordan Python gør programmeringen nemmere

Python er perfekt til IT og forenkler mange slags arbejde, lige fra systemautomatisering til arbejde inden for banebrydende felter som maskinindlæring.

Julia vs. Python: Fordele ved sprog i Julia

Julia blev designet fra starten til videnskabelig og numerisk beregning. Det er således ikke overraskende, at Julia har mange funktioner, der er fordelagtige for sådanne brugssager:

  • Julia er hurtig. Julias JIT-kompilering og typedeklarationer betyder, at den rutinemæssigt kan slå "ren", uoptimeret Python efter størrelsesorden. Python kan være lavet hurtigere ved hjælp af eksterne biblioteker, tredjeparts JIT-kompilatorer (PyPy) og optimeringer med værktøjer som Cython, men Julia er designet til at være hurtigere lige ud af porten.
  • Julia har en matematisk venlig syntaks. En stor målgruppe for Julia er brugere af videnskabelige computersprog og miljøer som Matlab, R, Mathematica og Octave. Julias syntaks for matematiske operationer ligner mere den måde, hvorpå matematiske formler skrives uden for computerverdenen, hvilket gør det lettere for ikke-programmører at tage fat på det.
  • Julia har automatisk hukommelsesstyring. Ligesom Python belaster Julia ikke brugeren med detaljerne i tildeling og frigørelse af hukommelse, og det giver et vist mål for manuel kontrol over affaldsindsamling. Ideen er, at hvis du skifter til Julia, mister du ikke en af ​​Pythons almindelige bekvemmeligheder.
  • Julia tilbyder overlegen parallelisme. Matematik og videnskabelig computing trives, når du kan bruge de fulde ressourcer, der er tilgængelige på en given maskine, især flere kerner. Både Python og Julia kan køre operationer parallelt. Imidlertid kræver Pythons metoder til parallelisering af operationer ofte, at data serialiseres og deserialiseres mellem tråde eller noder, mens Julias parallelisering er mere raffineret. Yderligere er Julias parallelisering-syntaks mindre top-tung end Pythons, hvilket sænker tærsklen til dens anvendelse.
  • Julia udvikler sine egne indbyggede maskinlæringsbiblioteker. Flux er et maskinlæringsbibliotek for Julia, der har mange eksisterende modelmønstre til almindelige brugssager. Da det er skrevet udelukkende i Julia, kan det ændres efter behov af brugeren, og det bruger Julias oprindelige just-in-time kompilering til at optimere projekter indefra og ud.

Julia vs. Python: Fordele ved Python

Selvom Julia er specialbygget til datavidenskab, mens Python mere eller mindre har udviklet sig til rollen, tilbyder Python dataoverbevisende nogle overbevisende fordele. Nogle af grundene til "generel anvendelse" Python kan være det bedre valg til datavidenskabeligt arbejde:

  • Python bruger nulbaseret matrixindeksering. På de fleste sprog, inklusive Python og C, er der adgang til det første element i en matrix med nul - f.eks. streng [0] i Python for det første tegn i en streng. Julia bruger 1 til det første element i en matrix. Dette er ikke en vilkårlig beslutning; mange andre matematiske og videnskabelige applikationer, som Mathematica, bruger 1-indeksering, og Julia er beregnet til at appellere til dette publikum. Det er muligt at understøtte nul-indeksering i Julia med en eksperimentel funktion, men 1-indeksering kan som standard være i vejen for vedtagelse af et mere generelt publikum med indgroede programmeringsvaner.
  • Python har mindre opstartsomkostninger. Python-programmer kan være langsommere end Julia-programmer, men selve Python-runtime er lettere, og det tager normalt mindre tid for Python-programmer at starte og levere de første resultater. Mens JIT-kompilering fremskynder eksekveringstiden for Julia-programmer, koster det også en langsommere opstart. Der er gjort meget arbejde for at få Julia til at starte hurtigere, men Python har stadig kanten her.
  • Python er moden. Juliasproget er ungt. Julia har kun været under udvikling siden 2009 og har gennemgået en hel del funktionskurve undervejs. Derimod har Python eksisteret i næsten 30 år.
  • Python har langt flere tredjepartspakker. Bredden og nytten af ​​Pythons kultur med tredjepartspakker er fortsat en af ​​sprogets største attraktioner. Igen betyder Julias relative nyhed, at softwarekulturen omkring den stadig er lille. Noget af det opvejes af evnen til at bruge eksisterende C- og Python-biblioteker, men Julia har brug for egne biblioteker for at trives. Biblioteker som Flux og Knet gør Julia nyttigt til maskinindlæring og dyb læring, men langt størstedelen af ​​dette arbejde udføres stadig med TensorFlow eller PyTorch.
  • Python har millioner af brugere. Et sprog er intet uden et stort, hengiven og aktivt samfund omkring det. Samfundet omkring Julia er entusiastisk og vokser, men det er stadig kun en brøkdel af størrelsen på Python-samfundet. Pythons enorme samfund er en kæmpe fordel.
  • Python bliver hurtigere. Bortset fra at få forbedringer af Python-tolken (inklusive forbedringer af multi-core og parallel behandling), er Python blevet lettere at fremskynde. Mypyc-projektet oversætter type-kommenteret Python til native C, langt mindre klodset end Cython. Det giver typisk fire gange præstationsforbedringer og ofte meget mere til rene matematiske operationer.
$config[zx-auto] not found$config[zx-overlay] not found