matlab: Eliminiere Elemente aus dem Array

7

Ich habe ziemlich viel Array. Um die Dinge einfacher zu machen, vereinfachen wir es:

%Vor%

Also gibt es eine Gruppe von 1 (4 Elemente), 2 (2 Elemente), 3 (4 Elemente), 4 (2 Elemente) und 5 (8 Elemente). Jetzt möchte ich nur Spalten behalten, die zu einer Gruppe von 3 oder mehr Elementen gehören. So wird es sein wie:

%Vor%

Ich habe es mit der for -Schleife gemacht, indem ich 1, 2, 3 usw. gescannt habe, aber es ist extrem langsam mit großen Arrays ... Vielen Dank für Anregungen, wie es effizienter geht :) Art.

    
Art 20.09.2012, 11:15
quelle

4 Antworten

7

Hier ist mein Zweiliner

%Vor%

accumarray wird verwendet, um die einzelnen Mitglieder von A zu zählen. Finden Sie Auszüge, die das Kriterium "3 oder mehr Elemente" erfüllen. Schließlich sagt Ismember Ihnen, wo sie in A sind. Beachten Sie, dass A nicht sortiert werden muss. Accumarray funktioniert natürlich nur für Integer-Werte in A.

    
angainor 20.09.2012, 12:15
quelle
8

Ein allgemeiner Ansatz

Wenn Ihr Vektor nicht unbedingt sortiert ist, müssen Sie ausführen, um die Anzahl der Vorkommen jedes Elements im Vektor zu zählen. Sie haben histc nur dafür:

%Vor%

Die letzte Zeile wählt die Elemente aus, die weniger als 3 Vorkommen haben und löscht sie.

Ein Ansatz für einen gruppierten Vektor

Wenn Ihr Vektor "semi-sorted" ist, dh wenn ähnliche Elemente im Vektor gruppiert sind (wie in Ihrem Beispiel), können Sie die Dinge ein wenig beschleunigen, indem Sie Folgendes tun:

%Vor%

Beachten Sie, dass der Vektor nicht vollständig sortiert sein muss, sondern dass ähnliche Elemente nebeneinander liegen.

    
Eitan T 20.09.2012 11:54
quelle
3

Was Sie beschreiben, heißt Lauflängencodierung .

Dafür gibt es in Matlab Software auf dem FileExchange. Oder Sie können es direkt wie folgt tun:

%Vor%

Sobald Sie Ihre Lauflängencodierung haben, können Sie Elemente basierend auf der Länge entfernen. d. h.

%Vor%

Und dann entschlüsseln, um das gewünschte Array zu erhalten:

%Vor%     
robince 20.09.2012 11:21
quelle
1

Hier ist eine andere Möglichkeit, Matlab-Einbauten zu verwenden.

%Vor%     
denahiro 20.09.2012 11:28
quelle

Tags und Links