Python 如何找到数组中N个连续数相等?

Python 如何找到数组中N个连续数相等?,python,pandas,numpy,Python,Pandas,Numpy,我有一个numpy.ndarray,它的值为-1或1。数组相当长,但我将发布一些示例 array([ 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1], dtype=int8) 该数组一直持续到索引200左右。我想找到N个连续值等于1或-1的位置。因此,在上面的示例中,如果N等于8,它应该返回索引11、12、13。我想使用列表分享我的原始解决方案 让arr=[1,1,-1,-1,…

我有一个numpy.ndarray,它的值为-1或1。数组相当长,但我将发布一些示例

array([ 1, -1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1, -1,
    1,  1,  1], dtype=int8)

该数组一直持续到索引200左右。我想找到N个连续值等于1或-1的位置。因此,在上面的示例中,如果N等于8,它应该返回索引11、12、13。

我想使用列表分享我的原始解决方案

arr=[1,1,-1,-1,…]

index = []
myList = list(arr)
for i in range(m-n): # m is length of array
    if myList[i:i+n].count(1)==n or myList[i:i+n].count(-1)==n:
        index.append(i)

index[]
现在保存满足您条件的所有索引

您可以使用
.cumsum
实现滑动窗口:

a = np.array([ 1, -1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1, -1,
    1,  1,  1], dtype=np.int8) 
N = 8

A = a.cumsum()
A[N:] -= A[:-N]
(np.abs(A)==N).nonzero()[0]
# array([11, 12, 13])
这是一个有-

样本运行-

In [146]: N = 8

In [147]: np.flatnonzero(np.convolve(np.diff(a)==0, [1]*(N-1))==(N-1))+1
Out[147]: array([11, 12, 13])

由于您标记了熊猫:

s = pd.Series(a)

N = 8
np.where(s.diff().eq(0).rolling(N-1).sum()==N-1)
输出:

(array([11, 12, 13]),)  

由于
m
已经是数组的长度,因此
len(m)
没有任何意义。它将给出一个错误。谢谢@DhavalTaunk
(array([11, 12, 13]),)