Entferne aufeinanderfolgende Duplikate in Julia

8

Ich bin ziemlich neu in Julia und ich weiß nicht, wie man aufeinanderfolgende Duplikate in einem Array entfernen kann. Zum Beispiel, wenn Sie dieses Array nehmen:

%Vor%

Ich möchte den Vektor v1 so erhalten, dass:

v1 = [8,9,5,8,1];

Könnte mir jemand helfen? Vielen Dank.

    
Samy Jelassi 09.04.2016, 13:40
quelle

5 Antworten

8

Eine Methode könnte sein:

%Vor%

Und mit dieser Funktion haben Sie:

%Vor%

Aber wenn man mit Arrays arbeitet, muss man entscheiden, ob Elemente tief oder flach kopiert werden sollen. Im Fall von ganzen Zahlen ist es egal.

    
Dan Getz 09.04.2016, 14:32
quelle
6

In StatsBase.jl gibt es eine rle -Funktion (Lauflängencodierung) genau das.

    
Neal Fultz 09.04.2016 20:07
quelle
4

Das ist viel langsamer als @ DanGetz's Funktion, aber hier ist eine Möglichkeit, es in einer Zeile zu machen:

%Vor%

Vielleicht ist es nützlich für jemanden, der nach einer vekotrisierten Lösung sucht.

    
niczky12 09.04.2016 18:16
quelle
4

Im Ziel der spirit @ niczky12-Einzellinienlösung verwendet das folgende% cos_de% -Paket (sehr nützlich und langsam in die Basis migrierend).

%Vor%

Habe keine Benchmarks gemacht, aber es sollte OK sein (aber langsamer als die längere Iterators.jl basierte Funktion).

    
Dan Getz 09.04.2016 19:15
quelle
2

Nur um zu üben ...

Hier ist eine weitere kleine Funktion, die Sie verwenden können, diese Funktion funktioniert nur für nicht negative Werte (einschließlich 0).

%Vor%

bearbeiten:

Hinzufügen einer weiteren Version, entsprechend der Eingabe in den Kommentaren. Ich denke, das sollte noch schneller sein, vielleicht könntest du es ausprobieren :) Diese Version sollte auch für negative Zahlen funktionieren.

%Vor%     
Esteban 15.04.2016 18:08
quelle

Tags und Links