Поиск большего числа индексов в списке, близком к нулю - PullRequest
0 голосов
/ 20 мая 2019

У меня есть список значений, который представляет функцию демпфирования при построении графика (так что это форма синусоиды). Таким образом, эта функция несколько раз передает y = 0, пока не выровняется по y = 0. Мне нужно найти индекс в тот момент, когда функция проходит ноль в третий раз.

Все значения являются числами с плавающей запятой, поэтому у меня есть функция, которая находит индекс, ближайший к нулю:

def find_index(list_, value):
    array = np.asarray(list_)
    idx = (np.abs(array - value)).argmin()
    return idx

Где 'list_' - список, а 'value' - ноль.

Эта функция работает, но она может извлечь только индекс первого момента, когда функция демпфирования (и, следовательно, список) ближе всего к нулю. Это означает, что он покажет нулевой индекс (потому что функция демпфирования начинается с нуля). Однако мне нужен индекс в третий раз, когда он ближе всего к нулю.

Как я могу получить индекс в третий раз, когда он будет ближе к нулю, а не в первый раз?

1 Ответ

0 голосов
/ 20 мая 2019

Вы ищете изменение в знаке.

import numpy as np

x = np.array([10.0, 1.0, -1.0, -2.0, 1.0, 4.0])

y = np.sign(x) # -1 or 1

print(y)

>>> [ 1.  1. -1. -1.  1.  1.]

Если вы вычислите разницу между последовательными элементами, используя np.diff, это будет либо -2, либо 2, оба имеют логическое значение True.

>>> [ 0. -2.  0.  2.  0.]

Теперь получите их индексы, используя np.nonzero, который возвращает кортеж для каждого измерения.Выберите первый.

idx = np.nonzero(np.diff(y))[0]

print(idx)

>>> [1 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...