gegeben.
Ich möchte nun auf die Spalten von A zugreifen, welche in C gegeben sind, und von der jeweiligen Spalte, die Zeiten, die in B gegeben sind. Klingt komisch...
reduziert das Problem, da bereits die richtigen Spalten ausgewählt sind. Auf die Zeilen, die in B angegeben sind, kann ich jedoch nicht zugreifen. Vielleicht weiß ja hier jmd. wie das funktioniert.
ps: B ist übrigens zufällig, d.h. die Einträge der Spalte(i) ergibt sich nicht aus den der Spalte(i-1)+1.
Vielen Dank schonmal vorab.
Viele Grüße
der Vladi
Vladi
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 04.08.2010, 20:47
Titel:
Was ich vergessen hatte, ich möchte auf eine Schleife versichten, die C durchläuft.
Ich denke, dass das mit EINEM Befehl möglich sein sollte.
häng doch mal das konkrete Beispiel (oder einen ausreichend großen Teil davon) und deinen bisherigen Code an. Ich schau heute abend mal, ob ich Verbesserungen finde.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Approach 1: sub2ind tic
repColumns = repmat(columns_down, size(rows_down), 1);
repRows = repmat(rows_down, size(columns_down), 1);
indices = sub2ind(size(allValues), repRows, repColumns);
table1 = allValues( indices );
%
% this is done 6 times for all possible combinations % - rows_up AND columns_up % - rows_mid AND columns_up % - rows_down AND columns_up % - rows_up AND columns_down % - rows_mid AND columns_down
%
% the tables 1 to 6 are then added up.
repColumns = repmat(columns_down, size(rows_mid), 1);
repRows = repmat(rows_mid, size(columns_down), 1);
indices = sub2ind(size(allValues), repRows, repColumns);
table2 = table1 + allValues( indices );
% Create resulting matrix that has the columns of table6 at the columns % given in columns_mid. The rows are given in rows_mid and don't differ
resultApproach1 = zeros(size(allValues));
resultApproach1(rows_mid(:,1), columns_mid) = table6;
display(['App 1: sub2ind took: ', num2str(toc), ' sec']);
Erklärung zum Beispiel:
Ich muss 6 Kombinationen berechnen und diese dann addieren.
Die erste Kombination entsteht für rows_down und columns_down.
rows_down und columns_down enthalten jeweils die Indizes mit denen dann auf allValues zugegriffen wird.
So entsteht eine erste Matrix der Größe (size(rows_down), size(columns_down)). Das passiert sechs mal (für die noch fehlenden Kombinationen).
Die sechs Matrizen werden dann addiert, es entsteht table6.
Diese Werte werden nun in eine leere Matrix geschrieben, und zwar an die Stellen, die in rows_mid und columns_mid angegeben werden. Hier braucht man kein sub2ind, denn rows_mid ist vektor.
Bei mir ist die erste Variante 5 mal langsamer als die zweite.
Das wird noch schlimmer für größere Matrizen.
Für weitere Fragen stehe ich natürlich gerne bereit. Danke schonmal für deine Mühe!
Viele Grüße
der Valdi
ps: In diesem Beispiel (und auf meinem Rechner) dauert das ca. 0.48 und 0.14 sec. Das ist nicht lange. In meinem eigentlichen Program, wird das allerdings sehr oft aufgerufen, weshalb das gerne auch ca. 30 Stunden rechnen kann. Wenn ich den Profiler benutze, erkennt man, dass das eintragen in die leere matrix, also folgende Zeile
Sorry für den Link, der Punkt hinter 28850 muss weg, dann funktioniertes
Viele Grüße
der Vladi
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.