Håndtering stor mengde strukturer i MATLAB

stemmer
4

Jeg trenger å håndtere enorme (titalls millioner) av MATLAB structs; Jeg trengte et dusin eller så felt, så jeg regnet med minne vil ikke være et problem, før jeg oppdaget dette ( forklaring )

>> s=[];
>> s.first=1;
>> whos
  Name      Size            Bytes  Class     Attributes

  s         1x1               132  struct              

>> s.second=2;
>> whos
  Name      Size            Bytes  Class     Attributes

  s         1x1               264  struct              

>> s.third=3;
>> whos
  Name      Size            Bytes  Class     Attributes

  s         1x1               396  struct

Som åpenbart stopper meg fra å bruke titalls millioner av mye større structs.

Ty til klasser løser problemet minnebruk (en markering på 56 bytes per struct matrisen), men det er uoverkommelig saktere på konstruksjonen og i ødeleggelse av gjenstander.

Hvordan kan jeg opprette stuct som er lett (som C structs) og rask?

Publisert på 13/11/2008 klokken 16:11
kilden bruker
På andre språk...                            


4 svar

stemmer
2

Et annet alternativ: hold struct av arrays i en skjult global struct. Lag en klasse objekt som graver i denne globale struct å skjære ut de data som gjelder for nettopp det en forekomst.

Den globale struct kan implementeres mer renslig med vedvarende søkeord og / eller ved hjelp av private / kataloger for informasjon skjule. Hvis du bruker 2008a eller nyere, bør det nye håndtaket objekt system bidra til å gjøre gjennomføringen mye renere.

Hvis du virkelig har store og komplekse datastrukturer, ville jeg seriøst vurdere et annet språk som C ++, Java eller Python m / numpy. Jeg elsker Matlab når mine oppgaver kartlegge godt til det. Datastrukturer er ikke en av Matlab sterke poeng, spesielt pre-2008a.

Svarte 27/11/2008 kl. 05:55
kilden bruker

stemmer
2

(A) bruker store matriser (hvor den 'første' felt av struct 1 er element 1 av den 'første' gruppe, for struct 2 er det i elementet 2, etc.), som Pyrolistical antyder.

(B) vurdere å bruke et annet språk som C ++ (eller kanskje Java) som gir bedre kontroll over minnebruk. Du får tilgang til C ++ kode via mex funksjoner (som kan litt vanskelig noen ganger). Du kan evaluere Java bytecode direkte fra Matlab.

Svarte 17/11/2008 kl. 14:26
kilden bruker

stemmer
2

Konvertere disse structs inn matriser, og deretter gi tilgangsmetoder via en klasse.

Svarte 13/11/2008 kl. 17:55
kilden bruker

stemmer
0

Hva mener du med klasser? Så vidt jeg husker klasser var begrepet i Matlab for type. Jeg antar at du mener en selvdefinert klasse.

En løsning (som også er anbefalt i de Matlab-dokumenter) er for å veksle fra en rekke til en structs struct av matriser (se i koblingen ved den R, G, B) f.eks.

Svarte 13/11/2008 kl. 16:23
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more