Matrizen-Algorithmus langsam < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 15:27 Mo 24.09.2007 | Autor: | chebsam |
hallo,
hab folgenden teil einer funktion in matlab genauer untersucht und möchte gerne wissen, ob jemand eine idee hat, wie es schneller läuft...das dauert echt extrem lange:
anzahl=150;
for i = 1:anzahl
name = ['b1_',num2str(i)];
load(name);
disp(['Shot ', num2str(i)]);
for z = 1:size(b1_res,2)
vekName = ['vektor_',num2str(z)];
load(vekName);
vektor(:,i) = b1_res(:,z);
save(vekName, 'vektor') ;
end
end
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:
tutorials.de
|
|
|
|
Hallo,
in erster Linie fällt auf, dass du hier mit vielen Dateien hantierst. Ich denke, wenn es dir gelänge, die Daten besser zu organisieren (1 "b1"-Datei, 1 "vektor"-Datei), dann würde es erheblich schneller gehen. Man könnte einmal alle Daten laden, sie im Speicher auswerten und dann in eine Datei zurückschreiben.
Falls eine Reorganisation nicht möglich ist, weiß ich im Moment auch nicht weiter.
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 18:14 Mo 24.09.2007 | Autor: | chebsam |
Was genau meinst du mit [1 "b1"-Datei, 1 "vektor"-Datei]?
Es sind tatsächlich ganz viele Vektoren (mehrere Tausend), aber das kann ich ja nicht ändern...saß schon 4h daran und habe keine Zeit gewonnen!
Also Anzahl=150 und je b1-Vektor habe ich wieder unzählige Vektoren, die dann in der zweiten for-Schleife überlagert werden.
Ich denke, dass der Befehl "load" bzw. "save" ziemlich lange dauert.
Gibt es eine Alternative?
Danke.
|
|
|
|
|
Hallo,
> Was genau meinst du mit [1 "b1"-Datei, 1 "vektor"-Datei]?
Na ja, wie du schon selber vermutest, dauern load und save recht lange, insbesondere die häufige Verwendung dieser Befehle. Also meinte ich bloß: Wenn du die Anzahl der Dateien (nicht der Daten!) verringern kannst, dann tu das. Ich weiß ja nicht, wie die Daten zustande kommen. Ich kenne ja die komplette Problemstellung nicht.
Das Laden der Daten könnte man in einem Zug durchführen und sie dann verarbeiten.
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 18:44 Mo 24.09.2007 | Autor: | chebsam |
Ich glaube an dieser Stelle scheitert's mit Matlab...das dauert einfach zu lange! Das Problem ist, dass ich erst die b1-Vektoren einlesen MUSS. Das sind Bilddaten, die erst nach und nach generiert werden.
kennst du Dich auch in C aus?
Lohnt es sich, diesen Teil der Funktion in C umzuschreiben? Hab seit einem Jahr kein C mehr programmiert!!!
PS: Nützt dir das was, wenn ich dir die ganze Funktion zusende per Email?
|
|
|
|
|
Hallo,
> Ich glaube an dieser Stelle scheitert's mit Matlab...das dauert einfach zu lange! Das Problem ist, dass ich erst die b1-Vektoren einlesen MUSS. Das sind Bilddaten, die erst nach und nach generiert werden.
Hmmm, die Bilddaten lassen sich in Matlab nicht generieren?
> kennst du Dich auch in C aus?
Joa, sollte für "einfache" Anwendungen reichen.
> Lohnt es sich, diesen Teil der Funktion in C umzuschreiben? Hab seit einem Jahr kein C mehr programmiert!!!
Nun, eine genaue Abwägung an dieser Stelle fällt mir, schwer, da ich sonst nicht viel über dein Problem weiß, aber...
> PS: Nützt dir das was, wenn ich dir die ganze Funktion zusende per Email?
Mal schauen...
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 15:56 Di 25.09.2007 | Autor: | chebsam |
Könnte man in C nicht Pointern bzw. "vector" arbeiten?
|
|
|
|
|
Hallo,
> Könnte man in C nicht Pointern bzw. "vector" arbeiten?
Ja natürlich. Dafür sind Pointer wie gemacht.
Das Problem ist, du schreibst in deiner Matlab-Datei, dass die Matrix zu groß werden könnte. Du müsstest also abschätzen, wieviele Daten(-sätze) du gleichzeitig im Speicher halten kannst, damit du herumpointern kannst.
Wenn du das Ganze in C mit genauso vielen Lade- und Speichervorgängen schreiben würdest, dann ginge ein Großteil des Geschwindigkeitsgewinns flöten (ok, es wäre immer noch schneller, aber nicht so schnell, wie möglich).
Ich kann das, was du mir geschickt hast, auch nicht schneller machen, weil die Lade- und Speichervorgänge so miteinander verflochten sind. Man müsste auf jeden Fall mehr Daten im Speicher halten und sie dort erstmal sammeln und dann erst zurückschreiben. Aber die Datendimensionen kannst nur du einschätzen.
Gruß
Martin
|
|
|
|