Sziasztok,
szeretnék c++ban egy jól használható mátrixkönyvtárat találni. Eddig a gsl-lel ismerkedtem, de túlzottan fapadosnak tűnik. A weben végtelen mennyiségű hasonló project van, de remélem, hogy itt valakinek vannak hasznos tapasztalatai néhánnyal.
Ami kéne:
- egyszerű, hatékony olvasás fileból (gsl-nél pl előre kell tudni a dimenziókat)
- mátrixok összefűzése (gsl-nél csak egy nagy új allokációját és a régi két kisebb bemásolását találtam)
- almátrixok hatékony kezelése (ebben pl tök jó a gsl a view-kkal)
- sorok/oszlopok kezelhető vektorformátumban való használata
- statisztikai függvények megléte előny
Ha valakinek vannak jó tapasztalatai valamelyik könyvtárral, ne rejtse véka alá.
Köszönöm.
- 2516 megtekintés
Hozzászólások
subscribe
--
Debian - The "What?!" starts not!
http://nyizsa.uni.cc
- A hozzászóláshoz be kell jelentkezni
Én is
---------------------------
Oszt jónapot!
- A hozzászóláshoz be kell jelentkezni
+1
--
Dropbox:
https://www.getdropbox.com/referrals/NTI3NzY1ODQ5
- A hozzászóláshoz be kell jelentkezni
kovesd a c++ utat: irj egyet :))
- A hozzászóláshoz be kell jelentkezni
blitz++
- A hozzászóláshoz be kell jelentkezni
ennél elég nehézkesnek tűnik a beolvasás
csak van már valami olyan,hogy megadok neki egy filenevet és kész
meg tudok konkatenálni egy sorban, ami max 20 karakter
- A hozzászóláshoz be kell jelentkezni
Vannak jó tapasztalataim a témában.
Csak nem MIP/MINLP célszolvert készítesz?
http://www.youtube.com/watch?v=QXz7-BNC6jw
http://nocirc.org/
- A hozzászóláshoz be kell jelentkezni
és tervezed ezek megosztását?
nem mip, csak szeretnék adatokat kezelni hatékonyan
- A hozzászóláshoz be kell jelentkezni
Boost uBLAS
- A hozzászóláshoz be kell jelentkezni
OpenGL :D
Az egész mátrixműveletekre épül. És még könnyen ki is rajzolhatod a mátrixod...
- A hozzászóláshoz be kell jelentkezni
hátrányok:
- többnyire csak float (egyszeres pontosságú, 4 byte-os) műveleteket támogatnak a kártyák. Amire normális számtásoknál szükség van, az a minimum double (8 byte-os), de ha már a CPU-ban ingyen benne van, akkor a long double (10 byte-os) pontosságú számolás. Ez általános célú könyvtárnál nagyjából el is dönti a kérdést.
- videokártyafüggő, hogy mit tudnak: nem lehetsz benne biztos, hogy a programod fut a user gépén
Javaslatok:
- sajátot írni :( sajnos sokszor csak ez megy
- Atlas, gyakorlatilag ez a standard. Atomra optimalizált egy adott processzor altípusra: http://acts.nersc.gov/atlas/index.html
- http://netlib.org -on körülnézni
- Armadillo - nem próbáltam, de ígéretes, gyakran van belőle release: http://arma.sourceforge.net/
- ROOT, ha nehéztüzérség kell: http://root.cern.ch
- A hozzászóláshoz be kell jelentkezni
Az Armadillo zsírkirálynak tűnik. Kérdés, hogy mennyire jó a memóriakezelése, és mennyire konvertálhatók értelmesen a típusai más típusokba. Mindenesetre ki fogom próbálni.
- A hozzászóláshoz be kell jelentkezni
Ami kéne ...
kerdes az hogy ugy kb mire is kell neked? sokdimenzios (sok=2 v. tobb) tomboket akarsz hatekonyan manipulalgatni (pl kepfeldolgozashoz) vagy matrixalgebrat szeretnel csinalni? (pl jo gyors szamolgatasok 3x3-as matrixokkal, valami matek/fizika/numerikus/... problemahoz)
- A hozzászóláshoz be kell jelentkezni
nem sokdimenziós (kb 3-4), de rohadt nagy mátrixokat hatékonyan manipulálgatni, statisztikákat számolni rajtuk, ilyesmi
algebra nemigen
- A hozzászóláshoz be kell jelentkezni
aha, tehat hogy 3-4 indexes tombokkent kezelne'd? mondjuk matrix[i][j][k][l] ahol minden index azert elegge me'retes tartomanyt fut be? a
- A hozzászóláshoz be kell jelentkezni
igen
- A hozzászóláshoz be kell jelentkezni
van egy parsoros kis konyvtaram, amivel ilyesmi objektumokat lehet dinamikusan allokalni ill felszabaditani. atmeretezni (sajnos) nem tud, arra nem nagyon volt igeny. ilyesmi, hogy:
double ****xyz;
xyz=tensor_alloc_4d(double,100,200,300,50);
...
tensor_free(xyz);
(de a tensor_alloc_?d()-n kivul me'g van x masik modja is a foglalasnak, ha pl forditasi idoben me'g a dimenziot sem tudod). ha kell, el tudom kuldeni (vagy pl bemasolom ide, mert kb 100 sor). az elemi muveleteket meg megirod mint egy sima ciklus.
- A hozzászóláshoz be kell jelentkezni
"(vagy pl bemasolom ide, mert kb 100 sor)"
Elore tiltakoznek. http://hup.pastebin.com/
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Numerical Recipes-t használtam egyszerűbb dolgokra (könnyű, kényelmes, de nem igazán ipari). Az új C++-os verzió elég tisztességesen meg van írva.
Nagyobb dolgokhoz a TNT nem jó? (Ez csak tipp, nem próbáltam.)
- A hozzászóláshoz be kell jelentkezni
Eigen esetleg?
- A hozzászóláshoz be kell jelentkezni
Ismertebb mátrix libek:
Eigen: nagyon gyors, algebra megy, más nem nagyon van.
uBLAS: elég gyors, algebra megy, más nem nagyon van.
OpenCV: a C++ felület relatíve fájdalommentes, sok hasznos fv-nyel (főleg olyanok, amik Computer Vision területén fontosak), de nem biztos, hogy minden van ami neked kell.
A gsl-t én még nem használtam (OpenCV eddig elég volt), de ha kb tudja ami neked kell, használd azt. Esetleg keress valami C++ wrappert.
Pl.: gslwrap.sourceforge.net
Régi, minimal, max arra jó, hogy kevesebbet kelljen szórakozni a memóriakezeléssel.
"- egyszerű, hatékony olvasás fileból (gsl-nél pl előre kell tudni a dimenziókat)"
Írj sajátot. Az, hogy előre kell tudni a dimenziókat elég alap. Anélkül hogy foglalsz neki memóriát ugye...
"- mátrixok összefűzése (gsl-nél csak egy nagy új allokációját és a régi két kisebb bemásolását találtam)"
Mást nem is fogsz találni. Max írtak rá egy fv-t. Gyorsabb nem lesz. :)
"- almátrixok hatékony kezelése (ebben pl tök jó a gsl a view-kkal)"
OpenCV tudja, de talán az összes amit írtam.
"- sorok/oszlopok kezelhető vektorformátumban való használata"
Almátrixként tudják kezelni. Ha a fv-ek jól vannak megírva más nem is kell.
(OpenCV-nél nincs is külön változó hosszú vektor osztály.)
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni