WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Benachbarte Werte in einem Vektor

 

plitschplatsch

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2014, 14:40     Titel: Benachbarte Werte in einem Vektor
  Antworten mit Zitat      
Hallo ihr lieben Matlab-Nutzer,

ich habe folgendes vorliegen:

Ich habe einen Vektor der Größe 144x1. Es handelt sich hierbei um einen Temperaturschnitt entlang eines Längengrads, wobei das ganze wolkensensibel ist. Sind Wolken im Bild haben die Einträge des Vektors den Wert Null.
Aufgrund von Interpolationen kann es sein, dass in einem Wolkenbereich dennnoch vereinzelt Werte drin stehen, die ich aber als Ausreißer bezeichen würde.

Was ich möchte ist, dass Matlab sich die beiden direkten Nachbarn meiner Werte im Vektor anschaut und für den Fall, dass diese beide Null sind, den Wert selbst auch Null setzt.

Hat jemand eine Idee, wie ich das umsetzen kann, oder zumindest einen Ansatz?

Beste Grüße und schon einmal vielen Dank!


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 15.09.2014, 16:06     Titel:
  Antworten mit Zitat      
Noch etwas gestöpselt, aber das ist die Idee:

Code:

a=[5 6 5 6 6 6 0 3 6 4 5 6 0 4 0 5 3]
nullen=find(~a)
ix=(diff(nullen)==2)
doppelnull=find(ix)
a(nullen(doppelnull)+1)
a(nullen(doppelnull)+1)=0
 


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
ActionAndi
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 02.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2014, 20:14     Titel: Ähnliches Problem
  Antworten mit Zitat      
Hallo,

ich glaube mein Problem ist ähnlich gelagert, daher platze ich mal hier rein. Hoffe ihr seid net böse Smile

Ich muss ein paar Messdaten durchkauen, die teilweise doppelte Werte zu gleichen Zeitpunkt haben (Problem der Messaufzeichnung). Dies möchte gerne elegant in einen kontinuielricen Zeitstrahl umwandeln, da ich später die Daten zur Interpolation verwenden möchte.
Das Problem verdeutlicht dieses Code-Beispiel:
Code:

t = [0 1 2 2 3 4 5 6 6 7];
Data = [0 1 2 2.4 3.5 4.5 5.3 -6 46 27];

dt = diff(t);
ddt = dt(dt~=0);

% preallocation
B = zeros(length(ddt),1);
T = B;

% Umrechnen
j = 1;
for i = 1:length(t)-1
    if(dt(i)~=0)
                B(j) = t(i);
                T(j) = Data(i);
                j = j+1;
    end
end

 


Das muss doch besser gehen. Ausserdem würde ich gerne den Mittelwert für den doppelten Eintrag haben (also B(3) = 2.2).

Habt Ihr einen Tipp?

Andi
Private Nachricht senden Benutzer-Profile anzeigen
 
plitschplatsch

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2014, 09:19     Titel:
  Antworten mit Zitat      
Super, danke Andreas!

Das sieht doch nach dem aus was ich brauche - damit werde ich nun mal rumexperimentieren:)
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 16.09.2014, 10:24     Titel:
  Antworten mit Zitat      
Hallo ActionAndi,

ich glaube, ein eigener Forenbeitrag wäre da angebrachte. Wie auch immer, dein Problem klingt nach einem Job für accumarray():
Code:
t = [0 1 2 2 3 4 5 6 6 7];
Data = [0 1 2 2.4 3.5 4.5 5.3 -6 46 27];

% unique t-Werte und die Indizes, an denen sie auftreten
[t_unique,~,idx] = unique(t);

% Anhand der Indizes die Daten in Data akkumulieren und @mean drauf anwenden
D_mean =  accumarray(idx', Data',[], @mean);

% Ergebnis darstellung
figure
plot(t, Data, 'ko')
hold on
plot(t_unique, D_mean,'rx')
legend('original', 'mean')

Die Daten werden gemäß ihres t-Wertes (eigentlich des Indexes) akkumuliert und dann auf diese akkumulierten Daten der Befehl mean ausgeführt. Im Plot siehst du das Ergebnis. Oder als Pseudo-Tabelle mit dne Spalten t_unique und D_mean:
Code:
>> [t_unique' D_mean]

ans =

         0         0
    1.0000    1.0000
    2.0000    2.2000
    3.0000    3.5000
    4.0000    4.5000
    5.0000    5.3000
    6.0000   20.0000
    7.0000   27.0000


Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.