Was bedeutet "Datensatz von n Vektoren"? In welcher Form liegen sie vor?
Bedeutet "x^(n-1)" hier die Ableitung oder die Potenz?
Was heißt "l_d sind mir bekannt"? Ist die Funktion in Matlab implementiert?
Was spricht gegen Schleifen? Das Gerücht, das Schleifen in Matlab generell langsam sind hat sich ja mit der Version R6.5 erledigt, also vor über 10 Jahren. Wenn die meiste Zeit in der Berechnung von "l_d" verwendet wird, würde hier auch eine Super-Beschleunigung der Erzeugung der Matrix kaum etwas bringen.
Gruß, Jan
Romanov
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.05.2016, 11:52
Titel:
Hallo Jan,
mit Datensatz von n Vektoren meine ich, dass verschiedene Vektoren x = [x_1;...;x_D] der Dimension D vorliegen. Dabei ist der Strich keine Ableitung, sondern soll zur Unterscheidung der n Vektoren dienen.
In dem Bild, welches insgesamt meine Funktion f definiert, sind weitere Unterfunktionen definiert, welche von dem jeweiligen Eintrag der Vektoren abhängen und den Vektoren selber. Was ich meine, wenn ich sage, ich kenne diese Unterfunktionen l_d, dann weiss ich, welche Werte sich ergeben, wenn ich einen Vektor x einsetze. D.h. diese können als normale bekannte Werte aufgefasst werden, welche vorher berechnet werden können.
Ich habe bisher zwei Schleifen dafür verwendet:
Code:
nX = size(X,2);
nY = size(Y,2);
D = size(X,1);
dquad = zeros(nY,nX);
for i = 1:nY
for j = 1:nX
dquad(i,j) = exp(-sum(((X(:,j) - Y(:,i))./reshape(l(i,j,:),[D,1])).^2));
end end
Möchte dies aber beschleunigen, eventuell durch umschreiben der gegebenen Werte der Funktionen l_d. Ich habe diese abhängig von der Definition bisher in einem Tensor der Größe (nX,nY,D) abgespeichert und greife punktuell darauf zurück.
Romanov
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.05.2016, 12:48
Titel:
Man kann sich das Problem auch erst einmal ohne exp stellen und nachher auf die entstehende Matrix exp anwenden, also vereinfacht geht es um folgendes Problem:
Code:
nX = size(X,2);
nY = size(Y,2);
D = size(X,1);
dquad = zeros(nY,nX);
for i = 1:nY
for j = 1:nX
dquad(i,j) = sum(((X(:,j) - Y(:,i))./reshape(l(i,j,:),[D,1])).^2);
end end
... verschiedene Vektoren x = [x_1;...;x_D] der Dimension D vorliegen.
In Deinem Code tauchen aber zwei Arrays X und Y auf. Das ist aber eine andere Aufgabenstellung!
Code:
nX = size(X,2);
nY = size(Y,2);
D = size(X,1);
dquad = zeros(nY,nX);
for i = 1:nY
for j = 1:nX
dquad(i,j) = exp(-sum(((X(:,j) - Y(:,i))./reshape(l(i,j,:),[D,1])).^2));
end end
Umschreiben der gegebenen Werte der Funktionen l_d.
Bitte lasse uns nicht erraten, was das bedeutet. Was ist "l_d"?
Zitat:
Ich habe diese abhängig von der Definition bisher in einem Tensor der Größe (nX,nY,D) abgespeichert und greife punktuell darauf zurück.
???
Du hast zwei Beispiele gepostet. Beim ersten wird vermutlich die meiste Zeit in
exp
verbracht und eine Optimierung der Schleife wird kaum etwas bringen. Im zweiten Code ist gerade dieses kritische
exp
weggefallen. Damit wird das Problem aber prinzipiell ein ganz anderes.
Bitte poste genau den Code, den Du beschleunigen möchtest. Anderfalls wäre es Zeitverschwendung eine Antwort zu formulieren, da es Dir nichts bringt.
Gruß, Jan
Romanov
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 31.05.2016, 17:09
Titel:
Hallo Jan,
es geht um dieses Problem:
Code:
nX = size(X,2);
D = size(X,1);
dquad = zeros(nX,nX);
for i = 1:nX
for j = 1:nX
dquad(i,j) = sum(((X(:,j) - X(:,i))./reshape(l_d(i,j,:),[D,1])).^2);
end end
l_d ist ein Tensor der Stufe 2, der den Nenner l_d(x)^2+l_d(x')^2 im angehängten Bild darstellt.
Das heisst er enthält alle diese Nenner und hat die Größe (nX,nX,D), da es für jeden Eintrag der nX x nX Matrix abhängig von der Dimension D, D solche Ausdrücke gibt.
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.