Nazdar, hledal jsem v manuálech násobení matic v PHP, ale nic jsem nenašel. Jenom klasický postup s vnořenými cykly, kterým se snažím u interpretovaných jazyků vyhnout kvůli plýtvání výkonem. Existují v PHP funkce pro násobení, sčítání a transpozici matic nebo je to jen v lepších jazycích?
V klasickém php zřejmě ne. Jedině snad http://pear.php.net/package/Math_Matrix. Jenom je to trochu staršího data.
Pokud jsou to větší matice, tak bych se spíš přikládněl k volání systémových funkcí nebo externích skriptů z "chytřejších" jazyků. :)
<HTML>Jakékoliv použití PHP bude plýtvání výkonem. K čemu to potřebuješ?</HTML>
Díky. Zdá se, že PHP není určen pro náročnější výpočty. Je to jazyk spíše na tvorbu šablon než na nějaké náročné výpočty. V Math_Matrix bude asi opět jen skript.
Měl jsem skutečně na mysli trochu větší matice. Zjistil jsem, že jejich přímé násobení je podporováno jen v několika jazycích (Matlab, Octave,...). Doufal jsem, že v PHP bude alespoň nějaká vhodná funkce, která to zrychlí.
Snad by mohla vést cesta přes Javu či Javascript - alespoň by byla zátěž přenesena ze serveru na klienta. Jeho zatížení mě už trápit nebude a v Javě by to mohlo být i výkonné.
Nípal: Na neuronovou síť, ale vyřeším to jinak. PHP se na to evidentně nehodí. Pokud by na násobení matic byla funkce napsaná v C, tak by se to použít dalo.
PHP i javascript jsou interprety. Tam nelze čekat zázraky.
Jestli to chceš na web, tak jedině Javu. Případně ASP.NET. Na desktopu pak klasiku.
Sám jsem si již několik jednoduchých interpretrů napsal, takže vím, že nemusí být pomalé. Záleží na tom, co umí. Pokud má vnitřně implementovánu např. uvedenou práci s maticemi, tak v maticových výpočtech může být skoro stejně rychlý jako kompilovaný jazyk. Jakmile se však začnou ve skriptech dělat cykly, výkon jde rapidně dolů.
Java by byla asi nejlepší, vyžaduje však plugin, který každý nemá. Javascript má skoro každý, je však výrazně pomalejší - trojitý cyklus může být chuťovka. Schválně vyzkouším různé možnosti (napadlo mne i XSLT) a porovnám výsledky.
V každém případě díky za názory. Jsou to jen experimenty.
Pokud to ještě někoho zajímá, tak v mém malém benchmarkovém testu násobení matic zvítězil interpretr Octave, za ním kompilátor C a na třetím místě Javascript Firefoxu. PHP bylo až na 5. místě za interpretrem Lua (je v něm napsán WoW).
"Měl jsem skutečně na mysli trochu větší matice. Zjistil jsem, že jejich přímé násobení je podporováno jen v několika jazycích (Matlab, Octave,...). Doufal jsem, že v PHP bude alespoň nějaká vhodná funkce, která to zrychlí."
Oba vyjmenovane programy jsou specializovane a optimalizovane pro narocne matematicke operace. Videl jsem v tom pocitat silene matice, tusim 20x20
Na notebooku mam wxmaxima
Googlem jsem nasel SciLAB
pak tez forum
http://www.murga-linux.com/puppy/viewtopic.php?t=51198
Those are:
GNU OCTAVE - For engineering and numerics (strong side matrix calculations). Mostly compatible to Matlab.
GNU R - standard package for statistics
MAXIMA - Computer Algebra System, also with GUI Frontend wxmaxima (similar to Mathematica and Maple)
GNU GRETL - econometrics and time series analysis
GEOGEBRA - interactive educational math package (high school level)
YACAS - tiny and efficient Computer Algebra
Sage - Huge, comprehsive and (all?)mighty package
NumPy, SciPy, SymPy - Python math modules
SciLab - Numeric package, similar to Matlab but not as compatible than Octave
the pet files also include amongs others gnuplot, GNU Lisp (glc), GNU Fortran (gfortran), GNU scientific Library and LAPACK libraries.
peta: Ten malý benchmarkový test jsem dělal na maticích 500x500 typu float, dva nejlepší programy pak ještě dělaly 2000x2000. Vítěz - Octave (30 s) - pak ochutnal i násobení 2 matic 5000x5000. PHP by v časovém limitu zvládlo cca 300x300, ovšem na freehostingu si to netroufám moc zkoušet.
Matice 20x20 nepovažuji za šílené, viz můj test.
Dík za seznam vhodných programů. Určitě vyzkouším R a Maximu, možná i SciLab.