Programovanie

Julia vs. Python: Čo je najlepšie pre dátovú vedu?

Spomedzi mnohých prípadov použitia, ktoré pokrýva Python, sa analýza dát stala pravdepodobne najväčšou a najvýznamnejšou. Ekosystém Python je nabitý knižnicami, nástrojmi a aplikáciami, vďaka ktorým je práca vedeckých výpočtov a analýzy údajov rýchla a pohodlná.

Ale pre vývojárov stojacich za jazykom Julia - zameraných špeciálne na „vedecké výpočty, strojové učenie, dolovanie dát, rozsiahlu lineárnu algebru, distribuované a paralelné výpočty“ - Python nie je rýchly ani pohodlný dosť. Cieľom Julie je poskytnúť vedcom a analytikom údajov nielen rýchly a pohodlný vývoj, ale aj ohromnú rýchlosť vykonávania.

Aký je jazyk Julia?

Julia, ktorú v roku 2009 vytvoril tím štyroch osôb a ktorá bola verejnosti predstavená v roku 2012, má slúžiť na riešenie nedostatkov v jazyku Python a ďalších jazykoch a aplikáciách používaných na vedecké výpočty a spracovanie údajov. „Sme nenásytní,“ napísali. Chceli viac:

Chceme jazyk, ktorý je otvoreným zdrojom s liberálnou licenciou. Chceme rýchlosť C s dynamikou Ruby. Chceme jazyk, ktorý je homoikonický, so skutočnými makrami, ako je Lisp, ale so zrejmou známou matematickou notáciou ako Matlab. Chceme niečo také použiteľné pre všeobecné programovanie ako Python, také ľahké pre štatistiku ako R, také prirodzené pre spracovanie reťazcov ako Perl, také výkonné pre lineárnu algebru ako Matlab a také dobré pri lepení programov dohromady ako shell. Niečo, čo sa dá ľahko naučiť, je však najšťastnejšie hackermi spokojné. Chceme, aby bol interaktívny a aby bol kompilovaný.

(Už sme spomínali, že by to malo byť také rýchle ako C?)

Tu je niekoľko spôsobov, ako Julia realizuje tieto túžby:

  • Julia je zostavená, nevykladaná. Pre rýchlejší výkon za behu je Julia kompilovaná pomocou technológie just-in-time (JIT) pomocou kompilátorového rámca LLVM. V najlepšom prípade sa Julia môže priblížiť alebo vyrovnať rýchlosti C.
  • Julia je interaktívna. Julia obsahuje REPL (read-eval-print loop) alebo interaktívny príkazový riadok, podobný tomu, čo ponúka Python. Rýchle jednorazové skripty a príkazy je možné vpichovať priamo dovnútra.
  • Julia má priamu syntax. Juliina syntax je podobná Pythonovej - stručná, ale tiež expresívna a silná.
  • Julia kombinuje výhody dynamického a statického písania. Môžete určiť typy premenných, napríklad „32-bitové celé číslo bez znamienka“. Môžete však tiež vytvoriť hierarchie typov, ktoré umožnia všeobecným prípadom manipulácie s premennými konkrétnych typov - napríklad napísať funkciu, ktorá akceptuje celé čísla bez zadania dĺžky alebo podpisu celého čísla. Môžete to dokonca urobiť aj bez úplného písania, ak to v konkrétnom kontexte nie je potrebné.
  • Julia môže volať knižnice Python, C a Fortran. Julia môže komunikovať priamo s externými knižnicami napísanými v jazykoch C a Fortran. Je tiež možné prepojiť sa s kódom Pythonu prostredníctvom knižnice PyCall a dokonca zdieľať údaje medzi Pythonom a Juliou.
  • Julia podporuje metaprogramovanie. Programy Julia môžu generovať ďalšie programy Julia a dokonca upravovať ich vlastný kód spôsobom, ktorý pripomína jazyky ako Lisp.
  • Julia má plne vybavený debugger. Julia 1.1 predstavila ladiacu sadu, ktorá vykonáva kód v lokálnom REPL a umožňuje vám prechádzať výsledkami, kontrolovať premenné a pridávať zarážky do kódu. Môžete dokonca vykonávať jemné úlohy, ako je napríklad prechádzanie funkciou generovanou kódom.

Súvisiace video: Ako Python uľahčuje programovanie

Python, perfektný pre IT, zjednodušuje mnoho druhov práce, od automatizácie systému až po prácu v špičkových oblastiach, ako je strojové učenie.

Julia vs. Python: Výhody jazyka Julia

Julia bola od začiatku navrhnutá pre vedecké a numerické výpočty. Nie je teda prekvapením, že Julia má veľa funkcií výhodných pre takéto prípady použitia:

  • Júlia je rýchla. Juliina kompilácia JIT a deklarácie typov znamenajú, že môže bežne poraziť „čistého“, neoptimalizovaného Pythona rádovo. Python môže byť vyrobené rýchlejšie prostredníctvom externých knižníc, kompilátorov JIT tretích strán (PyPy) a optimalizácií pomocou nástrojov ako Cython, ale Julia je navrhnutá tak, aby bola rýchlejšia hneď za bránou.
  • Julia má matematickú syntax. Hlavným cieľovým publikom pre Juliu sú používatelia vedeckých výpočtových jazykov a prostredí ako Matlab, R, Mathematica a Octave. Juliina syntax pre matematické operácie vyzerá skôr ako spôsob písania matematických vzorcov mimo výpočtového sveta, čo neprogramátorom uľahčuje rozvíjanie.
  • Julia má automatickú správu pamäte. Rovnako ako Python, ani Julia nezaťažuje používateľa podrobnosťami o prideľovaní a uvoľňovaní pamäte a poskytuje určitú mieru manuálnej kontroly nad zhromažďovaním odpadu. Myšlienka je, že ak prejdete na Juliu, nestratíte jednu z Pythonových bežných vymožeností.
  • Julia ponúka vynikajúci paralelizmus. Matematike a vedeckým výpočtom sa darí, keď môžete využiť všetky zdroje dostupné na danom stroji, najmä viacjadrové. Python aj Julia môžu prevádzkovať operácie paralelne. Metódy Pythonu na paralelizáciu operácií však často vyžadujú serializáciu a deserializáciu údajov medzi vláknami alebo uzlami, zatiaľ čo Juliina paralelizácia je rafinovanejšia. Ďalej je Juliina paralelizačná syntax menej náročná ako Pythonova, čo znižuje hranicu jej použitia.
  • Julia vyvíja svoje vlastné natívne knižnice strojového učenia. Flux je knižnica strojového učenia pre Juliu, ktorá má veľa existujúcich modelových vzorov pre bežné prípady použitia. Pretože je celý napísaný v Julii, môže ju používateľ podľa potreby upravovať a na optimalizáciu projektov zvnútra používa natívnu kompiláciu Julia Just-in-Time.

Julia vs. Python: Výhody Pythonu

Aj keď je Julia účelovo zameraná na dátovú vedu, zatiaľ čo Python sa viac-menej vyvinul do tejto úlohy, Python ponúka vedcovi údajov niekoľko presvedčivých výhod. Niektoré z dôvodov „všeobecného účelu“ Pythonu môžu byť lepšou voľbou pre prácu s dátovými vedami:

  • Python používa indexáciu polí založenú na nule. Vo väčšine jazykov vrátane jazykov Python a C je prvý prvok poľa prístupný s nulou - napr. reťazec [0] v Pythone pre prvý znak v reťazci. Julia používa 1 pre prvý prvok v poli. Nejde o svojvoľné rozhodnutie; mnoho ďalších matematických a prírodovedných aplikácií, napríklad Mathematica, používa indexovanie 1 a Julia má toto publikum osloviť. Je možné podporiť nulové indexovanie v aplikácii Julia pomocou experimentálnej funkcie, ale indexovanie 1 v predvolenom nastavení môže stáť v ceste prijatiu všeobecnejšie používaným publikom so zakorenenými programovacími návykmi.
  • Python má menšiu réžiu pri spustení. Programy v jazyku Python môžu byť pomalšie ako programy v prostredí Julia, ale samotný runtime v jazyku Python je ľahší a programom Python zvyčajne trvá menej času, kým sa spustia a dosiahnu prvé výsledky. Aj keď kompilácia JIT urýchľuje čas vykonania programov Julia, stojí to za cenu pomalšieho spustenia. Urobilo sa veľa práce, aby sa Julia rozbehla rýchlejšie, ale Python tu má stále výhodu.
  • Python je zrelý. Jazyk Julia je mladý. Julia je vo vývoji iba od roku 2009 a počas tejto doby prešla značným množstvom funkcií. Naopak, Python existuje už takmer 30 rokov.
  • Python má oveľa viac balíčkov tretích strán. Šírka a užitočnosť Pythonovej kultúry balíkov tretích strán zostáva jedným z najväčších lákadiel jazyka. Relatívna novosť Julie opäť znamená, že kultúra softvéru okolo nej je stále malá. Niektoré z nich sú vyvážené schopnosťou používať existujúce knižnice C a Python, ale Julia potrebuje na to, aby sa im darilo. Knižnice ako Flux a Knet robia Juliu užitočnou pre strojové učenie a hlboké učenie, ale drvivá väčšina tejto práce sa stále vykonáva pomocou TensorFlow alebo PyTorch.
  • Python má milióny používateľov. Jazyk nie je ničím bez veľkej, oddanej a aktívnej komunity okolo. Komunita okolo Julie je nadšená a rastie, ale stále je to len zlomok veľkosti komunity Python. Obrovská komunita Pythonu je obrovská výhoda.
  • Python sa zrýchľuje. Okrem získania vylepšení tlmočníka Pythonu (vrátane vylepšení viacjadrového a paralelného spracovania) sa Python zrýchlil ľahšie. Projekt mypyc prekladá typicky anotovaný Python do natívneho C, oveľa menej neohrabane ako Cython. Spravidla prináša štvornásobné vylepšenia výkonu a pre číre matematické operácie často oveľa viac.
$config[zx-auto] not found$config[zx-overlay] not found