Этот вопрос закрыт для ответов, так как повторяет вопрос Требуется перебрать список и получить последовательности со значениями больше 0. Как?
@Em5

Перебор массива на поиск серий. Что необходимо подправить в коде?

Имеется одномерный массив данных с длиной 100_000 элементов. Требуется написать код для перебора этого массива на серии, все элементы которых больше 0. При этом требуемая длина серий - от 100 и выше. Серии, длина которых меньше 100, "зануляются". Результат перебора записывается в список result.

Далее для удобстав представления привожу код перебора под упрощённые условия:

arr = np.array([0, 7, 1, 0, 4, 2, 5, 4, 0, 9, 0, 3])

В данном массиве сериями выступают [7,1] и [4,2,5,4].
В этом примере необходимо найти серии, длина которых 3 и более.

Результат выполнения кода должен быть следующим:

array_ = [0, 7, 1, 0, 4, 2, 5, 4, 0, 9, 0, 3] (было)
result = [0, 0, 0, 0, 4, 2, 5, 4, 0, 0, 0, 0] (должно стать)

Текущее решение основывается на прохождение по всему массиву "окном" (шаблон серии), длина которого 3:

import numpy as np

arr = np.array([0, 7, 1, 0, 4, 2, 5, 4, 0, 9, 0, 3])
window = 3

result = list()
origin = 0
for i in range(len(arr)):
    seria_start = origin
    seria_end = seria_start + window
    if seria_end <= len(arr):
        data = arr[origin:seria_end]
        if all([x > 0 for x in data]):
            array = arr[i:i+window]
            for elem in array:
                result.append(elem)
                pass
        else:
            result.append(0)
    origin += 1
    pass
print('array_:', list(arr))
print('result:', result)

Однако результат выполнения кода отличается от ожидаемого:
array_: [0, 7, 1, 0, 4, 2, 5, 4, 0, 9, 0, 3]
result: [0, 0, 0, 0, 4, 2, 5, 2, 5, 4, 0, 0, 0, 0]

Если указать window = 4, то это решит задачу под упрощённые условия, но это не совсем то, что мне нужно. Сложность в том, что мне не нужно "вручную" ковыряться, чтобы узнать сколько будет серий среди массива со 100_000 элементов и какой они длины; требуется найти решение, которое позволит получить список только с теми элементами, длина серии с которыми которых более 100 (автоматизированный поиск).

Что подправить в коде, чтобы решить задачу как с упрощённым условием, так и с изначальным, регулируя переменную window? Прошу помочь разобраться.
  • Вопрос задан
  • 108 просмотров
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы