在接近零的列表中查找更多索引

时间:2019-05-20 16:06:21

标签: python-3.x numpy

我有一个值列表,表示该函数在绘制时的阻尼函数(所以是正弦曲线的形式)。此函数多次传递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 :(得分:0)

您正在寻找标志的变化。

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]