2017-04-13 53 views
3

重复我有这样删除值它们在阵列

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

阵列,我想确定非零间隔的数量。我知道如何在for循环中做到这一点,但我不知道是否有一个很好的解决方案。

我正在寻找的方法是假设在数据重复时“折叠”数组。所以上面的阵列将成为例如

[0,1,0,1,0] 

用于计算它的目的当然会足以只返回

[1,1] 

,但我想知道一般的做法,也可能是能够处理多于两个的不同的元素如

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

左右。

回答

1

一种选择是拿起值时,有一个与布尔索引的改变:

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 

第一种情况:

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