mátrixkönyvtárat keresek

 ( karaj | 2010. november 13., szombat - 20:26 )

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.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

subscribe

--
Debian - The "What?!" starts not!
http://nyizsa.uni.cc

Én is

---------------------------
Oszt jónapot!

kovesd a c++ utat: irj egyet :))

blitz++

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

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/

és tervezed ezek megosztását?
nem mip, csak szeretnék adatokat kezelni hatékonyan

Boost uBLAS

OpenGL :D
Az egész mátrixműveletekre épül. És még könnyen ki is rajzolhatod a mátrixod...

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

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.

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)

nem sokdimenziós (kb 3-4), de rohadt nagy mátrixokat hatékonyan manipulálgatni, statisztikákat számolni rajtuk, ilyesmi

algebra nemigen

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

igen

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.

"(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

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.)

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