我有一个值列表,表示该函数在绘制时的阻尼函数(所以是正弦曲线的形式)。此函数多次传递y = 0,直到达到y = 0为止。我需要在函数第三次传递零时找到索引。
所有值都是浮点数,因此我有一个函数可以找到最接近零的索引:
def find_index(list_, value):
array = np.asarray(list_)
idx = (np.abs(array - value)).argmin()
return idx
其中“ list_”是列表,“ value”为零。
此函数确实起作用,但是它只能检索阻尼函数(因此列表)最接近零的第一时刻的索引。这意味着它将显示零索引(因为阻尼功能从零开始)。但是,我需要第三次接近零的索引。
如何获取第三次接近零而不是第一次的索引?
答案 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]