WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Geschwindigkeit optimieren: Array in Array einfügen

 

Mandel
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 30.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.10.2012, 12:27     Titel: Geschwindigkeit optimieren: Array in Array einfügen
  Antworten mit Zitat      
Hallo zusammen ...

Ich habe hier "ein paar" Rechnungen durchzuführen, bei denen immer wieder ( zT. verschiedene) 3D-Arrays in ein anderes "eingefügt" werden müssen.
Das sieht dann zZ zB so aus:

Code:
C(dx:bx,dy:by,dz:bz) = C(dx:bx,dy:by,dz:bz) + Ex(ax:cx,ay:cy,az:cz);


Da die Arrays aber recht groß sind (512x512x512) dauert das doch recht lang. Da diese Operation oft ausgeführt werden muss (mit jeweils verschiedenen ax, bx, ... komme ich unterm Strich auf Laufzeiten von 24-48h. Und da das ganze ggf. mehrmals wiederholt werden soll, hoffe ich, dass man da etwas an der Geschwindigkeit optimieren kann Wink

Hat vielleicht jemand eine gute Idee?

Danke schon mal Smile
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 10.10.2012, 16:25     Titel: Re: Geschwindigkeit optimieren: Array in Array einfügen
  Antworten mit Zitat      
Hallo Mandel,

Es ist niocht möglich, eine einzelne aus dem Kontext gerissene Zeile bzfgl. der Laufzeit zu optimieren.
Matlab sollte gerade für solche Array-Operationen sehr schnell sein, aber es kommt immer darauf an, ob Du z.B. wegen einer fehlenden Pre-allocation Disk-Swapping verwendest, also auf der Festplatte rechnest, oder nicht. Solche Details lassen sich teilweise mit dem Profiler herausfinden. Am besten wäre es aber hier ein lauffähiges kleines Beispiel zu posten, so dass wir sinnvolle Verbesserungsvorschläge machen können.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Mandel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 30.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2012, 23:51     Titel:
  Antworten mit Zitat      
Vielen Dank erstmal für die Antwort.
Gleich vorraus: Ich kenne mich wirklich nur so viel wie nötig mit Matlab aus, daher möge man mit mir bitte nicht zu hart ins Gericht gehn Wink

Soweit ich das sehe wird nix auf die Platte geschrieben. Es scheinen einzig Operationen im RAM zu sein.

Hintergrund des ganzen Problems ist, dass ich gern eine 3D-Faltung umgehen möchte. Denn diese ist bei komplexen 512x512x512 Arrays irgendwie sehr Speicher- und Rechenintensiv Very Happy
Das Gute ist, dass der Kern zwar eine recht gefüllt 3D-Matrix ist, die "Struktur" mit der gefaltet werden soll aber nur eine 2D-Fläche in der Mitte einer 3D-Matrix ist.
Mein "genialer" Gedanke war also die Faltung nachzuahmen, indem ich den Kern multipliziert mit dem Wert der 2D-Struktur an der jeweiligen Stelle einfach an dort einfüge wo er hin gehört, dann zum nächten Pixel gehe usw. ... Ich hoffe ihr versteht was ich meine Wink

Als Code ausgedrückt sieht das so aus:
Code:
[X1,Y1,Z1] = size(Kerr);
xx=X1/2-x;
yy=Y1/2-y;
zz=Z1/2-z;

if xx>=0
    x1 = 1+xx;
    x2 = X1;

    x3 = 1;
    x4 = X1-xx;
end;

if xx<0
    x1 = 1;
    x2 = X1+xx;

    x3 = 1-xx;
    x4 = X1;
end;  

if yy>=0
    y1 = 1+yy;
    y2 = Y1;

    y3 = 1;
    y4 = Y1-yy;
end;

if yy<0
    y1 = 1;
    y2 = Y1+yy;

    y3 = 1-yy;
    y4 = Y1;
end;  

if zz>=0
    z1 = 1+zz;
    z2 = Z1;

    z3 = 1;
    z4 = Z1-zz;
end;

if zz<0
    z1 = 1;
    z2 = Z1+zz;

    z3 = 1-zz;
    z4 = Z1;
end;


Km(x1:x2,y1:y2,z1:z2) = Km(x1:x2,y1:y2,z1:z2) + P(x,y)*Kerr(x3:x4,y3:y4,z3:z4);


Wobei man dazu sagen muss, dass beide Arrays gleich groß sind und P(x,y) schon nur die 2D-Struktur ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.