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

Wertesprünge in Vektor zählen

 

Buhmann
Forum-Anfänger

Forum-Anfänger



Beiträge: 30
Anmeldedatum: 25.05.11
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 15.02.2012, 13:33     Titel: Wertesprünge in Vektor zählen
  Antworten mit Zitat      
Hallo zusammen!

Kurze Frage:
Ich habe einen langen, binären Vektor und will nun zählen, wie viele zusammenhängende 1er-Blöcke es zwischen den ganzen Nullen gibt.
Da gibt es doch bestimmt eine elegantere Methode, als alle Elemente durchzugehen und mitzuzählen oder?

Ciao
Christian

EDIT:
Hat sich erledigt, hab die Lösung schon gefunden:
Man kann bwlabel natürlich nicht nur auf Matrizen, sondern auch auf einzeilige Matrizen, sprich Vektoren anwenden Rolling Eyes Laughing
(max(bwlabel(vektor)) liefert dann die Anzahl der Blöcke in vektor)
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.02.2012, 13:40     Titel:
  Antworten mit Zitat      
Hallo

Alternative

Code:

A=[1 1 0 1 0 0 0 0 0 1 1]
length(strfind([0 A 0], [1 0]) - strfind([0 A 0], [0 1]))
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Buhmann
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 30
Anmeldedatum: 25.05.11
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 20.02.2012, 11:47     Titel:
  Antworten mit Zitat      
Aha, interessant, darauf wäre ich nicht gekommen.
Damit würde man auch gleichzeitig die Länge der Blöcke ermitteln.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.02.2012, 12:06     Titel:
  Antworten mit Zitat      
Buhmann hat Folgendes geschrieben:
Aha, interessant, darauf wäre ich nicht gekommen.
Damit würde man auch gleichzeitig die Länge der Blöcke ermitteln.


Ja damit kann man die Länge einzelner Blöcke ermitteln
Private Nachricht senden Benutzer-Profile anzeigen
 
testuser

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.07.2012, 12:53     Titel:
  Antworten mit Zitat      
Hallo,

ich habe ein ähnliches Problem und wollte hier gern anknüpfen.

Ich habe einen monoton steigenden Zeitvektor der jedoch nur einzelne zusammenhängende Blöcke enthält.

Bsp.:
Code:
time = [1 2 3 4 5 6 13 14 15 16 20 21 22 23];
 


Ich brauche die Länge bzw. den Zeitlichen Abstands der Blöcke bzw. des längsten Blocks. Hat jemand eine Idee?

MfG
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.07.2012, 14:21     Titel:
  Antworten mit Zitat      
Hallo,

Dann wende zuerst (DIFF(time) == 1) an. Danach sollten die oben genannten Methoden helpfen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Annagoesmatlab
Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 04.11.12
Wohnort: ---
Version: R2015b
     Beitrag Verfasst am: 27.02.2014, 15:01     Titel:
  Antworten mit Zitat      
Hallo,

ich würde auch gerne die länge meines größten zusammenhängenden werteblocks aus meinem Vektor mit 8760 werten wissen. Also habe ich erst
Code:

angewendet, damit mein vektor nur noch aus 0 und 1 besteht, aber bei dem Befehl
Code:
length(strfind([0 A 0], [1 0]) - strfind([0 A 0], [0 1]))


kommt die Fehlermeldung: CAT arguments dimensions are not consistent.

Habt ihr eine Idee woran das liegen könnte?

LG
Anna
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 27.02.2014, 15:56     Titel:
  Antworten mit Zitat      
Hallo Anna,

vermutlich ist dein Vektor A ein Spaltenvektor. Der Code ist allerdings für einen Zeilenvektor geschrieben. Du müsstest deinen Vektor A also vorher zu einem Zeilenvektor transponieren.

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Annagoesmatlab
Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 04.11.12
Wohnort: ---
Version: R2015b
     Beitrag Verfasst am: 27.02.2014, 16:25     Titel:
  Antworten mit Zitat      
Ah ja danke. Very Happy

Aber jetzt hab ich noch ein Problem. Denn durch den Befehl bekomm ich ja nur die Anzahl meiner Blöcke wieder und nicht wie viele Werte mein längster Block hat.
Also die größte Anzahl der Werte die zwischen den Nullen vorkommen.

Wie könnte ich diese Anzahl der Werte denn jetzt noch raus bekommen?

Lg
Anna
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 27.02.2014, 16:54     Titel:
  Antworten mit Zitat      
Hallo,

die Länge der einzelnen Blöcke kriegst du mit
Code:
strfind([0 A 0], [1 0]) - strfind([0 A 0], [0 1])

Die Länge des längsten Blocks somit mit
Code:
max(strfind([0 A 0], [1 0]) - strfind([0 A 0], [0 1]))
.

Falls dir das mit dem strfind nicht zusagt: zu dem Thema weist Jan auch regelmäßig auf sein Beispiel auf dem Fileexchange hin:
http://www.mathworks.com/matlabcent.....gth/content/RunLength_M.m
Für dich besonders interessant wären die Zeilen unter dem ersten "if vectorized". Allerdings zählt dies natürlich auch die Länge der Nuller-Blöcke.

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.