Python 如何找到数组中N个连续数相等?
我有一个numpy.ndarray,它的值为-1或1。数组相当长,但我将发布一些示例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,…
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]),)