Jazyk pro matematické výpočty

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jazyk pro matematické výpočty
« Odpověď #60 kdy: 26. 09. 2015, 10:13:39 »
Má. Například takto vytvoříte pole od 1 do 5: System.Array.CreateInstance(typeof(int), new[] { 5 }, new[] { 1 })
Jak s tímhle chce nějaký C# soupeřit?

Netvrdím, že s tím má C# soupeřit, jen říkám, že tam jde indexovat pole i od 1.
Ne že bych měl C# nějak zvlášť v oblibě, ale to násobení pole skalárem tam jde taky, jako ostatně v každém jazyce s přetěžováním operátorů.


iwtu

Re:Jazyk pro matematické výpočty
« Odpověď #61 kdy: 26. 09. 2015, 11:06:07 »
C# pod Linuxom bez problemov. .NET uz je open source.

Už jsem psal, že C# je příliš univerzální jazyk a pro vědecké výpočty se tedy nehodí. Vždyť ani nemá pole od jedné, ale od nuly. C# je spíš jazykem pro programátory, vědcům víc vyhovuje Fortran. Mimo jiné i proto, že je lépe vybaven pro práci s vektorovými procesory, pro které jsou cykly z C# velkou překážkou.

Pišem Vám posledný raz. Ako veľmi často, nemáte pravdu, C# je možné indexovať pole od čoho chcete.. Aj kedy nie, čo áno, tak je triviálne si takú triedu vyrobiť.

Ale očividne je nutné Vám povedať, i keď pochybujem, že to zaberie, lebo s obľubou riešite príspevky, ktoré sa Vás vôbec netýkajú, ale predsa skúsím ozrejmiť, že som odpovedal autorovi otázky a nie Vám. Ako pomerne takmer vždy.. Skúste sa nad sebou zamyslieť alebo si nájdite nejaké hobby, lebo naozaj ste jeden z tých, ktorí tuna nesmierne radi zvrhávajú diskusie..

Neviem, v akej komunite sa pohybujete Vy.. Fotran používajú hlavne fyzici aj keď majú veľký trend prechádzať na C++. Ooops, C++ je univerzálny jazyk. Vedci ohľadom strojového učenia a big data používajú Matlab a R.

Kit

Re:Jazyk pro matematické výpočty
« Odpověď #62 kdy: 26. 09. 2015, 12:11:55 »
Fotran používajú hlavne fyzici aj keď majú veľký trend prechádzať na C++. Ooops, C++ je univerzálny jazyk. Vedci ohľadom strojového učenia a big data používajú Matlab a R.

Matlab, R, Octave. Jsou to nástupci Fortranu. Ano, jsou to jazyky pro matematické výpočty a nemám s tím problém.

C++ se však na matematické výpočty nehodí a na tom trvám. C++ je programovacím jazykem programátorů. Pokud se nějaký vědec nechá ukecat programátorem na C++, je to jeho problém.

Fortran je něco mezi. Vědec by měl v prvé řadě sáhnout po jazycích Matlab, R nebo Octave, protože ty mu přinesou požadovaný komfort. Na Fortran ani nemusí přijít řada, případně se v něm dá doprogramovat chybějící knihovna zmíněných jazyků.

Fortran proti C++ ještě jeden příjemný bonus: Programy v něm napsané jsou rychlejší.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jazyk pro matematické výpočty
« Odpověď #63 kdy: 26. 09. 2015, 12:34:24 »
C# pod Linuxom bez problemov. .NET uz je open source.

Už jsem psal, že C# je příliš univerzální jazyk a pro vědecké výpočty se tedy nehodí. Vždyť ani nemá pole od jedné, ale od nuly. C# je spíš jazykem pro programátory, vědcům víc vyhovuje Fortran. Mimo jiné i proto, že je lépe vybaven pro práci s vektorovými procesory, pro které jsou cykly z C# velkou překážkou.

Pišem Vám posledný raz. Ako veľmi často, nemáte pravdu, C# je možné indexovať pole od čoho chcete.. Aj kedy nie, čo áno, tak je triviálne si takú triedu vyrobiť.

Ale očividne je nutné Vám povedať, i keď pochybujem, že to zaberie, lebo s obľubou riešite príspevky, ktoré sa Vás vôbec netýkajú, ale predsa skúsím ozrejmiť, že som odpovedal autorovi otázky a nie Vám. Ako pomerne takmer vždy.. Skúste sa nad sebou zamyslieť alebo si nájdite nejaké hobby, lebo naozaj ste jeden z tých, ktorí tuna nesmierne radi zvrhávajú diskusie..

Neviem, v akej komunite sa pohybujete Vy.. Fotran používajú hlavne fyzici aj keď majú veľký trend prechádzať na C++. Ooops, C++ je univerzálny jazyk. Vedci ohľadom strojového učenia a big data používajú Matlab a R.
Ještě bych doplnil, že v ekonometrii se také používá hlavně C++, nejspíš kvůli rychlosti. "Quants" na Wall street v drtivé většině v ničem jiném než C++ nepíšou.

Radek Miček

Re:Jazyk pro matematické výpočty
« Odpověď #64 kdy: 26. 09. 2015, 12:55:09 »
Fotran používajú hlavne fyzici aj keď majú veľký trend prechádzať na C++. Ooops, C++ je univerzálny jazyk. Vedci ohľadom strojového učenia a big data používajú Matlab a R.

Fortran proti C++ ještě jeden příjemný bonus: Programy v něm napsané jsou rychlejší.

Pro symbolické výpočty to obvykle neplatí.


Re:Jazyk pro matematické výpočty
« Odpověď #65 kdy: 26. 09. 2015, 15:01:18 »
C++ se však na matematické výpočty nehodí a na tom trvám. C++ je programovacím jazykem programátorů. Pokud se nějaký vědec nechá ukecat programátorem na C++, je to jeho problém.
Všechny "matematické jazyky" fungují tak, že je v C, C++ nebo Fortranu napsané knihovny, ve kterých probíhá vlastní výpočet, a nad tím buď je nebo není nějaký ten vysokoúrovňový "matematický" jazyk (R, Python), ve kterém se knihovny lepí dohromady.

Samostatnou kategorií jsou pak výpočty vysoce paralelizované přes nějaké to MPI apod., kde se opět pracuje s C++ nebo spíš samotným C.

Jestli to znamená nebo neznamená, že C/C++ "se nehodí na matematické výpočty", ať si rozhodne každý soudruh sám...

Stan

Re:Jazyk pro matematické výpočty
« Odpověď #66 kdy: 26. 09. 2015, 20:43:33 »
Domnívám se, že v jakémkoliv jazyce jde naprogramovat cokoliv. Ale předpokladem je mistrovské zvládnutí daného jazyka a v tomto případě i detailní znalost problematiky HMM a SAT, související algebry a schopnost tohle vtesat do algoritmů. Pokud tohle zvládáš, tak tě upřímně obdivuju.

Spíš bych doporučoval si najít vhodné knihovny nebo celý framework zabývající se problematikou. A s tím už přijde i požadavek na jazyk, který tento framework potřebuje k obsluze.

Příklad: já si teď tak trošku hraju s neuronovými sítěmi, machine learning apod. V této oblasti teď hodně jede framework TORCH. A ten se světem komunikuje v jazyce LUA. Což je skriptovací jazyk nad C. A celé se to opírá o OpenBLAS, což je knihovna pro lineární algebru psaná v C a Fortranu.

Tím chci říct, že není nutné omezit se na jenom jeden jazyk, klidně vem z každého to nejlepší.

PS: ten TORCH+LUA je docela porod, ale kdybych to měl bastlit od píky (tady řekněme násobení matic) sám, tak s tím seknu dávno.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jazyk pro matematické výpočty
« Odpověď #67 kdy: 26. 09. 2015, 22:18:57 »
Domnívám se, že v jakémkoliv jazyce jde naprogramovat cokoliv. Ale předpokladem je mistrovské zvládnutí daného jazyka a v tomto případě i detailní znalost problematiky HMM a SAT, související algebry a schopnost tohle vtesat do algoritmů. Pokud tohle zvládáš, tak tě upřímně obdivuju.

Spíš bych doporučoval si najít vhodné knihovny nebo celý framework zabývající se problematikou. A s tím už přijde i požadavek na jazyk, který tento framework potřebuje k obsluze.

Příklad: já si teď tak trošku hraju s neuronovými sítěmi, machine learning apod. V této oblasti teď hodně jede framework TORCH. A ten se světem komunikuje v jazyce LUA. Což je skriptovací jazyk nad C. A celé se to opírá o OpenBLAS, což je knihovna pro lineární algebru psaná v C a Fortranu.

Tím chci říct, že není nutné omezit se na jenom jeden jazyk, klidně vem z každého to nejlepší.

PS: ten TORCH+LUA je docela porod, ale kdybych to měl bastlit od píky (tady řekněme násobení matic) sám, tak s tím seknu dávno.
HMM nejsou moc složité (a algebra tam nikde není). SAT je ale oříšek, moderní metody jsou poměrně komplikované a naivní implementace je pomalá. Nicméně nikdy neuškodí zkusit si algoritmus napsat, člověk aspoň problematiku lépe pochopí.

Re:Jazyk pro matematické výpočty
« Odpověď #68 kdy: 26. 09. 2015, 22:52:22 »
A celé se to opírá o OpenBLAS, což je knihovna pro lineární algebru psaná v C a Fortranu. [...] ten TORCH+LUA je docela porod, ale kdybych to měl bastlit od píky (tady řekněme násobení matic) sám, tak s tím seknu dávno.
Jenom poznámka na okraj: OpenBLAS, ATLAS,... se používá snad ve všech těhle frameworcích - i v Rku nebo numpy. Jestli si s tím hraješ víc, zkus taky cuBLAS (CUDA-accelerated BLAS).

Radek Miček

Re:Jazyk pro matematické výpočty
« Odpověď #69 kdy: 26. 09. 2015, 22:59:07 »
HMM nejsou moc složité (a algebra tam nikde není).

Je tam lineární algebra.

IMO s tou jednoduchostí to je jako u SATu - triviální problémy vyřešíte učebnicovým algoritmem (konfliktem řízené učení klauzulí), který na těžší problémy nestačí.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jazyk pro matematické výpočty
« Odpověď #70 kdy: 26. 09. 2015, 23:13:43 »
HMM nejsou moc složité (a algebra tam nikde není).

Je tam lineární algebra.

IMO s tou jednoduchostí to je jako u SATu - triviální problémy vyřešíte učebnicovým algoritmem (konfliktem řízené učení klauzulí), který na těžší problémy nestačí.
Lineární algebru jsem tam teda nikde neviděl. Zato hodně pravděpodobnosti.
Pro HMM ale existuje jen ten "učebnicový" algoritmus, na rozdíl od SAT se urychlit nedá.

Radek Miček

Re:Jazyk pro matematické výpočty
« Odpověď #71 kdy: 26. 09. 2015, 23:43:35 »
HMM nejsou moc složité (a algebra tam nikde není).

Je tam lineární algebra.

IMO s tou jednoduchostí to je jako u SATu - triviální problémy vyřešíte učebnicovým algoritmem (konfliktem řízené učení klauzulí), který na těžší problémy nestačí.
Lineární algebru jsem tam teda nikde neviděl. Zato hodně pravděpodobnosti.

Viz třeba Skryté Markovské modely od R. Bartáka, strana 9.

Citace
Pro HMM ale existuje jen ten "učebnicový" algoritmus, na rozdíl od SAT se urychlit nedá.

Například učení modelu se dá urychlit (oproti EM algoritmu). Naivní implementace rovněž může mít problémy s velkým množstvím stavů.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Jazyk pro matematické výpočty
« Odpověď #72 kdy: 28. 09. 2015, 15:57:05 »
Pro HMM a SAT zrovna existují knihovny v C, takže jdou volat z v podstatě libovolného jazyka. Z obecného pohledu se hodí pro matematické a obecně symbolické výpočty Swift díky své syntaxi a typovému systému (Apple slíbil vydat otevřený překladač pro Linux). Práci s tenzory pak můžu zapisovat elegantně matematicky, např. násobení matic bude
Kód: [Vybrat]
let A = Tensor(indices: .Contravariant, .Covariant)
let B = Tensor(indices: .Contravariant, .Covariant)
...
let C = A.i.j * B.j.k
Pro manipulaci s vektory lze mít jeden operátor pro násobení dávající skalární, vektorový nebo tenzorový součin podle kontextu:
Kód: [Vybrat]
func *(t1:Vector, t2: Vector) -> Scalar { ... }
func *(t1:Vector, t2: Vector) -> Vector { ... }
func *(t1:Vector, t2: Vector) -> Tensor { ... }

A tak dále. Swift lze přímo míchat s kódem a knihovnami napsanými v C/C++ a využívat OpenCL, OpenMP a podobné knihovny/techniky pro zrychlení výpočtu. Např. ve Stanfordu už Swift pro matematické/symbolické výpočty používají.