Teilen Sie ein Array in MATLAB

8

Ich habe ein Array von Integer-Zahlen, und ich möchte dieses Array teilen, wo 0 kommt und eine Funktion, die mir Split-Punkte geben.

Beispiel: Array: 0 0 0 1 2 4 5 6 6 0 0 0 0 0 22 4 5 6 6 0 0 0 4 4 0

Die Funktion muss diese Zahlen zurückgeben:

%Vor%

Diese Zahlen sind ein Index für Anfang und Ende von Zahlen ungleich Null.

    
Javad Yousefi 01.07.2011, 14:53
quelle

3 Antworten

5

Hier ist eine einfache vektorisierte Lösung mit den Funktionen DIFF und FIND :

%Vor%

Der obige Code funktioniert, indem zuerst ein Spaltenarray mit Einsen, die Nicht-Null-Elemente angeben, erstellt wird, dieses Array mit Nullen aufgefüllt wird (falls eine der Nicht-Null-Bereiche sich zu den Arraykanten erstreckt) und die elementweisen Unterschiede genommen werden . Dies ergibt einen Vektor edgeArray mit 1 , der den Beginn eines Nicht-Null-Bereichs angibt, und -1 , das das Ende eines Nicht-Null-Bereichs angibt. Dann wird die Funktion FIND verwendet, um die Indizes der Starts und Enden zu erhalten.

Eine Seitennotiz / Nitpick: das sind nicht die Indizes der Anfang und Ende der Nicht-Null-Spannen, wie Sie sagen. Sie sind technisch die Indizes kurz vor die Starts und kurz nach die Enden der Non-Zero-Spannen. Sie möchten stattdessen Folgendes:

%Vor%     
gnovice 01.07.2011, 15:17
quelle
2

Versuchen Sie es

%Vor%     
Phonon 01.07.2011 15:17
quelle
2

Zum Thema, aber mit einer leichten Variation:

%Vor%

Da gnovice bereits auf die Positionssemantik von indices hingewiesen hat, möchte ich nur hinzufügen, dass mit dieser Lösung verschiedene Schemata sehr einfach gehandhabt werden können, wenn indices berechnet wird. Also, für Ihre Anfrage:

%Vor%     
eat 01.07.2011 16:11
quelle

Tags und Links