2016-12-08 2 views
0

Ich habe Probleme beim Schreiben eines MATLAB-Codes, der den Maximalwert jeder Zelle meines Einzellenarrays vel_data, einer 1x430 Zelle, die mehrere Excel-Tabellen enthält, finden muss Daten bestehend aus M Zeilen x 1 Spalte. Ich möchte den Maximalwert sowie jeden Wert vor und nach diesem Maximalwert extrahieren, bis die erste 0 in einem neuen Zellenfeld erreicht ist.Suchen mehrerer Nullwerte in einem großen Zellenfeld in MATLAB

z.B. Wenn die erste Zelle im Array [3 2 1 0 2 6 4 3 0 1 0] wäre, würde sie die Werte [0 2 6 4 3 0] extrahieren und dies für jede Zelle im Array tun.

Ich weiß, dass die folgenden Extrakte die maximalen Werte des Zellenarrays, aber ich möchte dafür wie ich oben erwähnt tun.

d=dir(f); 
for n=1:numel(d) 
    max_vel{n} = deal(max(vel_data{n})); 
end 

Jede Beratung/Beispielcode würde sehr geschätzt werden.

Antwort

2

Erster Index des maximalen Werts, der als idx extrahiert wird. Dann werden die Indizes aller Elemente, die 0 sind, als f1 extrahiert. Der Index des Elements, das 0 ist und unmittelbar vor dem maximalen Wert ist, wird als f2 extrahiert. und f3 ist der Index des Elements, das 0 ist und unmittelbar nach dem Maximalwert liegt.

vel_data = {[3 1 0 2 6 4 0 1 0] , [1 1 0 9 3 0 4 6 9]} 
for n=1:numel(vel_data) 
    data = vel_data{n}; 
    [~,idx] = max(data); 
    f1 = find(data==0); 
    if isempty(f1) 
     max_vel{n} = data; 
     continue; 
    end 
    f2 = find(f1 < idx,1,'last'); 
    f3 = find(f1 > idx,1); 
    if isempty(f2) 
     idx_first = 1; 
    else 
     idx_first =f1(f2); 
    end 
    if isempty(f3) 
     idx_last = numel(data); 
    else 
     idx_last =f1(f3); 
    end 
    max_vel{n} = data(idx_first:idx_last); 
end 
+0

Ich denke, ich verstehe, was Sie sagen. Um die letzte Nullstelle und die erste Nullstelle nach dem Extrahieren eines Maximalwerts zu finden, indexierten Sie zuerst den Maximalwert, extrahierten dann alle Nullstellen in der Zelle, die 0 enthielt, und extrahierten dann die beiden Werte mit f2, f3. – Shin

+0

Das Problem ist, dass ich denke, dass diese Methode den Maximalwert des gesamten Zellenarrays extrahiert, während ich dies brauche, um das Maximum jeder Zelle im Array zu extrahieren. Darüber hinaus ergab mein erster Versuch, diesen Code auszuführen: Fehler beim Verwenden von horzcat; Dimensionen von verketteten Matrizen sind nicht konsistent mit der Zeile max_vel {n}. – Shin

+0

Können Sie mehr über die Daten erklären? Es ist sehr nützlich, wenn Sie ein einfaches Beispiel mit reduzierter Größe und die erwartete Ausgabe bereitstellen. – rahnema1

Verwandte Themen