Vectoring mit Auswertung zweier benachbarter Elemente
Droke
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.11.2020, 13:23
Titel: Vectoring mit Auswertung zweier benachbarter Elemente
Hallöchen,
ich schreibe gerade einen Code, der verschiedene Arrays/CellArrays in denen jeweils 3-Dimensionale Punkte gespeichert sind, abfragt und zur Auswertung an eine Funktion übergibt.
Das ganze dauert ganz schön lange und ich habe mich gefragt, ob die vielen for-Schleifen vielleicht durch geschicktes Vectoring (zumindest einige davon) ersetzt werden könnten, um Rechenzeit zu sparen. Vielleicht gibt es dafür ja auch andere Tricks, die ich gerade nicht auf dem Schirm hab.
Ignoriert die Zeilen am Anfang, die die Variablen belegen. Die sind nur dafür da, damit ein lauffähiges Beispiel zustande kommt.
Bei i_cnt = 1 passieren einige besondere Dinge, deshalb habe ich den Fall schon mal rausgenommen. Der muss sowieso extra gerechnet werden. Ich finde für den Rest aber keine sinnvolle Lösung, so dass point1 und point2 immer zwei aufeinanderfolgende Zeile von points_a sind und ebenso point3 und point4 aufeinanderfolgende Felder von points_b.
Code:
i = randi(100);
j = randi(15);
k = j;
l = randi(50);
m = l;
p = l+1;
result_final = cell(1,i);
points_a = randi([-500,500],j*p,3);
points_b = cell(j*p,i);
for i_cnt = 2:1:i;
for j_cnt = 1:1:j*p;
points_b{i_cnt,j_cnt} = randi([-500,500],1,3);
endfor;
endfor;
Viel hängt davon ab, was foo ist und wie es arbeitet.
endfor ist nicht MATLAB. Nutzt du evtl. Octave? Ich kann mir gut vorstellen, dass allein das Verwenden von MATLAB statt Octave eine erhebliche Beschleunigung bringt.
Je nach den Möglichkeiten von foo sollte es machbar sein, nur zwei Schleifen über j_cnt und k_cnt zu verwenden und dann jeweils nur eine vektorisierte Auswertung von foo, die mit sum aufsummiert wird.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
du hast recht, leider habe ich keine Matlab Lizenz zur Verfügung und nutze deshalb Octave.
In foo wird hauptsächlich die geometrische Lage der Geraden durch point1,point2 und point3,point4 ausgewertet und dann abhängig vom Ergebnis eine von mehreren Formeln berechnet (in die Formel gehen unter anderem Winkel und Länge der Geraden ein). Das Ergebnis geht dann in result ein.
bist du Student? Viele Unis haben einen Rahmenvertrag mit MathWorks, so dass alle Studenten freien Zugang zu MATLAB haben. Wenn du mir schreibst, an welcher Uni du bist (gerne per PN), dann kann ich das prüfen. Ansonsten finde ich, dass die Investition für eine Studentenlizenz doch überschaubar ist.
Zitat:
In foo wird hauptsächlich die geometrische Lage der Geraden durch point1,point2 und point3,point4 ausgewertet und dann abhängig vom Ergebnis eine von mehreren Formeln berechnet (in die Formel gehen unter anderem Winkel und Länge der Geraden ein).
Daraus alleine kann ich nicht beurteilen, ob die Funktion vektorisierbar ist. Es ist aber gut möglich. Versuch den Vorschlag doch mal?
Wenn du dabei auf Probleme stößt, bitte den Inhalt von foo posten.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
für private Nutzung schau dir mal die Home Version an.
Für berufliche Zwecke würde ich wirklich empfehlen, sich MATLAB anzusehen. Wenn du das weiter verfolgen möchtest, schick mir gerne eine PN, wo du arbeitest.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Einstellungen und Berechtigungen
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
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.