ich bin ein ziemlicher Anfänger was Matlab angeht und benötige daher eure Hilfe bei einem vermutlich relativ leichten Problem.
Ich habe eine Datei mit sehr viele Daten und möchte diese paarweise "matchen" , das heißt in meiner "fertigen" Matrix sollen nur die Werte der Spalten 1 und 2 (und folgende) auftauchen wo auch beide wirklich einen Wert und kein NaN haben. Es gibt also immer eine Spalte mit einer daneben stehenden Referenzspalte, 1+2, 3+4, 5+6 usw.
Ich hab das ganze jetzt mit einer Schleife versucht, Problem ist das mir in der Endmatrix immer nur die beiden Werte der letzten beiden Spalten angezeigt werden. Die anderen Werte gehen unter.
Code:
n = size(mPrices,2);
i = 1;
while i < n
i = i+2;
% richtige Daten aufrufen, immer ein Fonds mit der nebenstehenden Benchmark
mMatchedData = mPrices(1:end , i:i+1);
% Anzahl Spalten ermitteln
iCols = size(mMatchedData,2);
% Nicht NaN Eintrage feststellen
lIsNotNaNmat = ~isnan(mMatchedData);
% Zeilensummen bilden
vRowSum = sum(lIsNotNaNmat,2);
% Vektor der zu selektierenden Zeilen
lSelect = vRowSum == iCols;
% Daten selektieren
mMatch1 = mMatchedData(lSelect,:);
%end
Also ich habe die Renditedaten (als Zeitreihe) verschiedener Investmentfonds. In der daneben stehenden Spalte habe ich jeweils die Benchmark für den vorherigen Fonds. Ich möchte nun jeweils paarweise gucken dass sowohl beim Fonds als auch bei der Benchmark alle NaN Werte gelöscht werden. Also es sollen bei diesem paarweisen Vergleich alle Zeilen gelöscht werden bei dem einer der beiden NaN Werte hat.
Und das ganze dann halt nicht nur für einen Fonds + Benchmark sondern für alle Fonds jeweils in Bezug auf ihre nebenstehende Benchmark.
Das Beispiel sagt mir gar nichts. Die Punkte dienen wohl der Optik.
Bitte poste, was Du in Matlab vorliegen hast. Das wird wohl eine Matrix sein. Die Bedeutung der Zahlen spielt gar keine Rolle.
Aber es kommt darauf an, ob dies ein File ist, ob Du es bereits importieren kannst oder ob es bereits ein Array ist. Bitte zeige uns also den bisherigen Code. Was bedeutet "Daten gelöscht"? Was soll statt dessen dort erscheinen?
[num, txt, raw] = xlsread( 'Fondsdaten.xls', 'A1:AMJ1217', 'basics' );
% einlesen der Datei aus Excel
mPrices = num(1:end , 2:end);
% Zuordnung der relevanten Daten in eine Matrix mPrices
n = size(mPrices,2);
i = 1;
while i < n
i = i+2;
% richtige Daten aufrufen, immer ein Fonds mit der nebenstehenden Benchmark
mMatchedData = mPrices(1:end , i:i+1);
% Anzahl Spalten ermitteln
iCols = size(mMatchedData,2);
% Nicht NaN Eintrage feststellen
lIsNotNaNmat = ~isnan(mMatchedData);
% Zeilensummen bilden
vRowSum = sum(lIsNotNaNmat,2);
% Vektor der zu selektierenden Zeilen
lSelect = vRowSum == iCols;
% Daten selektieren
mMatch1 = mMatchedData(lSelect,:);
%end
Das ist der Code den ich bisher hab. Die "gelöschten Daten" sollen nicht mehr auftauchen, die Zeilen sollen gelöscht werden.
Tut mir leid aber ich weiß nicht wie ich das ganze noch anders beschreiben soll?! Ich hab ne Menge Daten und möchte die NaN Werte rausgelöscht haben, dabei gehören immer zwei Spalten zusammen und wenn in Spalte 1 in Zeile 15 ein NaN ist soll in der zugehörigen zweiten Spalte auch der Wert aus Zeile 15 gelöscht werden.
die Frage ist, was anstelle der gelöschten Daten stehen soll.
"Nichts" gibt es innerhalb einer numerischen Matrix nicht. Das, was einem "nichts" am nähesten kommt, ist NaN.
Wenn in einer numerischen Matrix etwas wirklich gelöscht (und nicht nur durch NaN ersetzt) werden soll, dann muss man komplette Zeilen oder Spalten entfernen.
Falls du, wenn in einer Spalte NaN steht, den Nachbareintrag auf NaN setzen willst, ginge das so für die ersten beiden Spalten z.B. so:
Hmm so richtig hab ich es wohl noch nicht geschafft richtig zu vermitteln was ich genau haben möchte ...
Also ich meine wenn beispielsweise in Zeile 47 ein NaN auftaucht dann soll Zeile 47 verschwinden, also direkt von 46 auf 48, und dass dann sowohl für Spalte 1 als auch für Spalte 2.
und was soll dann mit dem Inhalt von Spalten 3 und 4 in Zeile 47 passieren?
Wenn diese erhalten bleiben sollen, dann ist es bei einer numerischen Matrix generell nicht möglich, dass Spalte 1 und 2 von Zeile 47 verschwinden.
Ausnahme: es ist sicher gestellt, dass in jeder Spalte die gleiche Anzahl von Elementen verschwinden sollen. Das wird aber wohl allgemein nicht der Fall sein.
Wenn in diesem Fall die gesamte Zeile gelöscht werden soll:
Ah vielen Dank, jetzt hab ich das Problem erst richtig realisiert. Dann muss ich mir dafür noch was anderes überlegen.
Könnte ich dich noch bei einem anderen Problem um Hilfe bitten?
Also ich möchte von den Daten meiner Matrix jeweils für die Spalten 1,3,5 usw. einen Wert B ausrechnen. Der errechnet sich indem man die Kovarianz von Spalte 1 und Spalte 2 durch die Varianz von Spalte 2 teilt. In der Ergebnismatrix soll dann für jede 2te Spalte ein B-Wert ausgegeben werden.
Das ist mein bisheriger Code, leider bekomm ich so immer nur den B Wert für die letzte Spalte heraus.
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.