от
Например что-то вроде:
pre_hold_list = [

Здесь условие состоит в том, что текущее значение не равно нулю, функция будет удерживать значение, которому удовлетворяется это условие, до следующего значения, которое удовлетворяет этому условию (то есть оно будет содержать -2, затем -1, затем 3).

Поиск np.hold () или np.step () ничего не дает мне в Google.
    

        

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

2 Ответы

0 голосов
от
Здесь можно использовать хитрость с помощью
cumsum(..)
[numpy-doc] и
diff()
[numpy-doc]:
import numpy as np

def hold(iterable, condition):
    cond = np.array(condition)
    vals = np.array(iterable)
    a = vals * cond
    a[cond] = np.diff(np.hstack(((0,), a[cond])))
    return a.cumsum()
Первый параметр - это
iterable
, который содержит элементы, второй параметр
condition
- это итерация одинаковой длины с логическими значениями. Например:
0 голосов
от
Неважно, я закодировал функцию, которая делает это, используя кумулятивную природу cumsum и diff. Если есть способ улучшить это, пожалуйста, дайте мне знать.
def holdtil(x, condition):
    condition_index = np.where(condition)[0]
    condition_value = np.take(x, condition_index)
    condition_value_diff = np.diff(condition_value)

    holdtil_diff = np.zeros(len(x))
    holdtil_diff[condition_index[0]] = condition_value[0]
    holdtil_diff[condition_index[1:]] = condition_value_diff
    return np.cumsum(holdtil_diff)
РЕДАКТИРОВАТЬ: Я проверил производительность между моим решением и @Willem Van Onsem, и у меня очень небольшое преимущество во времени.
def hold_func():
    start = time.time()
    for i in range(1000):
        x = np.random.randint(
    
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...