Ich hoffe, dass ich für diese Frage nicht gekaut werde, aber ich suche nach einem effizienteren Weg, um diese kleine Aufgabe in MATLAB zu erledigen. Grundsätzlich habe ich eine Liste von Jahren mit entsprechenden Werten, wobei Jahre wiederholt werden. Zum Beispiel:Effizienterer Weg, gewisse Zeilen der Matrix bedingt zu halten
...
1910 1,04
1910 2,53
1910 0,94
1911 2,13
1911 5,32
...
Ich möchte eine Reihe von Jahren auswählen und den Durchschnitt über alle Werte in Spalte 2 nehmen, die ein Jahr in diesem Bereich hat. Das mache ich gerade, indem ich ein logisches Array von max_year> = data (:, 1)> = min_year mache und dieses Array mit Daten (:, 2) verkettet (zB new_data = horzcat (logical_array, data (:, 2))), mit "find", um die Indizes dieses Arrays zu markieren, die entweder 0 oder 1 und dann, wenn es 1 ist, ziehen das Jahr von Daten zu Daten2 und wenn es 0 ist entfernen diese Zeile vollständig. Diese
ist, was der Code sieht aus wie
years = rawdata(:,yearcolumn); %extracts year vector from data
years = years>=firstyear_i&years<maxyear; %labels which rows we are considering
levels = [years,rawdata(:,datacolumn)]; %new vector where first column shows if being considered and second is rawdata for that row
indices1 = find(levels(:,1)==0); %indexes rows for deletion
indices2 = find(levels(:,1)==1); %indexes rows we are using
levels(indices2,1) = rawdata(indices2,1); %if using row, replace "1" with appropriate year from rawdata
levels(indices1,:) = []; %if not using row, remove it from data we are considering
Ich frage mich, ob es einen besseren Weg, entweder dies zu tun. Vielen Dank!
Dies ist genau das, was ich übersehen habe. Ich habe vergessen, dass die logische Indexierung in MATLAB funktioniert :). Ich wusste, dass ich viel zu viele Schritte hatte, weshalb ich hierher kam, haha. –