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

Sequenzen mit Werte bestimmen

 

Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2013, 12:56     Titel: Sequenzen mit Werte bestimmen
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine Frage, mit der ich leider alleine nicht mehr weiterkomme. Sad

Ich habe zum Beispiel folgenden Vektor:

1,3,7,NaN,Nan,2,4,10,NaN,3,17,NaN,2,NaN,NaN

Nun möchte ich eine Abfrage starten, die bei der ersten Zahl anfängt und zählt, wie viele "Blöcke" von aufeinanderfolgenden Zahlen es in Summe gibt.

Also für das Beispiel wäre es die folgenden "Blöcke":
1,3,7
2,4,10
3,17
2

Also in Summe 4 Blöcke. Gibt es da etwas Elegantes, wie man das herausfinden kann? Im Idealfall gibt es gleich noch die Länge für jeden Block an. Also für das Beispiel:

3
3
2
1

Würde gerne vermeiden, umständlich Schleifen zu bauen. Sad

Vielen vielen Dank schon mal für die Hilfe!

Liebe Grüsse,
M.


studi
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 11.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2013, 13:20     Titel:
  Antworten mit Zitat      
Hallo M.

Du kannst ausnutzen, dass es eine Funktion gibt, die die Position von NaN Elementen in einem array verwenden:
isnan

Ich habe folgendes Beispiel ausprobiert

Code:

a =[1,3,4,NaN,4 ,5,NaN, 3,4,5,6,NaN,3 54,NaN]

%Test,ob Eintrag NaN ist:boolean
nanlist=isnan(a)
%finde Position der Nan Eintraege
location_nan=find(nanlist)

%initialisiere block-array
bloecke=zeros(length(location_nan),1);
bloecke(1)=location_nan(1)-1
for i=1:length(bloecke)-1
bloecke(i+1)=location_nan(i+1)-location_nan(i)-1
end

 


Wenn dein Array nicht mit NaN endet, muss vielleicht fuer den letzten Eintrag noch eine Fallunterscheidung gemacht werden.
Fuer den Fall dass
Code:
als string importiert ist - und deine Daten dann wohl in Form eines cell arrays vorliegen, koenntest du analog auf die Eigenschaft isnumeric testen (die dann alle Zahleintraege betrachtet).

Y.
_________________

Nach unserer bisherigen Erfahrung sind wir zum Vertrauen berechtigt, daß die Natur die Realisierung des mathematisch denkbar Einfachsten ist. Albert Einstein
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 10.01.2013, 13:52     Titel:
  Antworten mit Zitat      
Hallo,

Hier mal ohne Schleife:

Code:
log_a   = ~isnan(a);
start   = strfind([0 log_a > 0 0],[0 1]);
ende    = strfind([0 log_a > 0 0],[1 0]);
length_of_blocks    = ende - start
count_blocks = length(length_of_blocks)

_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2013, 14:18     Titel:
  Antworten mit Zitat      
Suuuper - perfekt. Funktioniert beides einwandfrei - obwohl mir die Variante ohne Schleife natürlich besser gefällt. Smile

Ich danke euch - ihr seid meine Rettung! *hüpf*

Maria
 
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.