Найти местоположение определенной последовательности в массиве numpy - PullRequest
0 голосов
/ 07 октября 2019

У меня есть пустой массив, который выглядит следующим образом: [1 -1 -1 1 1 1 -1 -1 -1 1 -1 -1 1 -1]

Как мне найти местоположениепоследовательность [1 1 1 -1]?

Вывод функции должен выглядеть примерно так: Occurrence = 3, поскольку последовательность начинается с индекса 3.

Спасибо, что помогли мне!

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

В одной строке:

[i for i in range(0,len(x)) if list(x[i:i+4])==[1, 1, 1, -1]]

[3]

Если вы хотите общее решение:

#define your np.array and your list
x=np.array([1 ,-1, -1 ,1 ,1 ,1, -1, -1, -1 ,1, -1, -1, 1 ,-1])
sublist=[1, 1, 1, -1]

[i for i in range(0,len(x)) if list(x[i:i+len(sublist)])==sublist]

[3]
0 голосов
/ 07 октября 2019

Если у вас есть другой диапазон чисел, сработает двойной цикл ...

def subindex(sub, arr):
    index = i = -1  # or None or whatever is relevant when sub is NOT found
    ext_arr = list(arr)
    ext_arr.extend([np.NaN]*len(sub))
    for j, sub_j in enumerate(sub):
        for i, arr_i in enumerate(ext_arr[j:j+len(sub)]):
            try:
                if arr_i != sub_j:
                    continue  # get out of the inner loop and check from next i
            except:
                pass
        # if you are here, you have a match
        index = i
        break
    return index

Результат ...

>>> arr = "1 -1 -1 1 1 1 -1 -1 -1 1 -1 -1 1 -1".split(" ")
>>> sub = "1 1 1 -1".split()
>>> print(subindex(sub, arr))
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...