【发布时间】:2018-07-31 17:49:51
【问题描述】:
在一个 numpy 数组中,需要所有最接近给定常量的值的索引。
背景是数字信号处理。该数组包含一个滤波器的幅度函数(np.abs(np.fft.rfft(h))),并且在幅度为例如的地方搜索某些频率(=索引)。 0.5 或在另一种情况下为 0。
大多数时候,所讨论的值并不完全包含在序列中。关闭值的索引应该在这个里面找到。
到目前为止,我想出了以下方法,在该方法中,我查看了序列和常数之间差异的符号变化。但是,这仅适用于在相关点单调递增或递减的序列。有时它也会关闭 1。
def findvalue(seq, value):
diffseq = seq - value
signseq = np.sign(diffseq)
signseq[signseq == 0] = 1
return np.where(np.diff(signseq))[0]
我想知道是否有更好的解决方案。仅适用于一维实浮点数组,对我的计算效率要求不高。
作为一个数字示例,以下代码应返回 [8, 41]。为了简单起见,我在这里用半波替换了滤波器幅度响应。
f=np.sin(np.linspace(0, np.pi))
findvalue(f, 0.5)
我发现的类似问题如下,但它们只返回第一个或第二个索引:
Find the second closest index to value
Find nearest value in numpy array
【问题讨论】: