2017-04-13 8 views
3

Ich habe ein Array wieEntfernen Werte, wenn sie in Array wiederholen

[0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0] 

und ich mag die Anzahl der Nicht-Null Intervalle bestimmen. Ich weiß, wie ich das natürlich in einer for-Schleife machen kann, aber ich frage mich, ob es eine nette numpy Lösung dafür gibt.

Die Methode, nach der ich suche, soll das Array "zusammenbrechen", wenn sich ein Wert wiederholt. So dass die obige Anordnung würde zum Beispiel wird

[0,1,0,1,0] 

aus Gründen es zu zählen wäre natürlich ausreichend sein, nur

[1,1] 

zurückzukehren, aber ich mag eine allgemeine Ausrichtung wissen, dass auch sein könnte in der Lage, mehr als zwei verschiedene Elemente wie

[1,1,1,2,2,2,3,3,0,0,1,1,2,2] 

oder so zu behandeln.

Antwort

1

Eine Möglichkeit ist, die Werte zu holen, wenn eine Änderung mit boolean Indizierung ist:

import numpy as np 
a = np.array([1,1,1,2,2,2,3,3,0,0,1,1,2,2]) 

a[np.concatenate(([True], np.diff(a) != 0))] 
# array([1, 2, 3, 0, 1, 2]) 

np.count_nonzero(a[np.concatenate(([True], np.diff(a) != 0))]) 
# 5 

Erster Fall:

b = np.array([0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0]) 
​ 
b[np.concatenate(([True], np.diff(b) != 0))] 
# array([0, 1, 0, 1, 0]) 

np.count_nonzero(b[np.concatenate(([True], np.diff(b) != 0))]) 
# 2 
Verwandte Themen