首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中查找数组中出现特定值的索引值

在Python中查找数组中出现特定值的索引值
EN

Stack Overflow用户
提问于 2013-06-13 07:57:38
回答 2查看 1.1K关注 0票数 3

我正在使用DAQ对正弦电压进行采样。我将样本存储在一个列表中,然后对该列表进行FFT。我的问题是,我只想获得正弦波的完整周期的FFT,所以我想找到列表的索引值,其中的值非常接近于零,这样我就可以将其他值更改为零。

例如,如果我有一个非常粗糙的正弦波,采样如下:

代码语言:javascript
复制
[-3, -2, -1, 0, 1, 2, 3, 4, 3, 2, 1, 0, -1, -2, -3,  4, -3, -2, -1, 0, 1, 2]

我想要检测零(实际上是每隔一个零),这样我就可以生成这个数组:

代码语言:javascript
复制
[ 0,  0,  0, 0, 1, 2, 3, 4, 3, 2, 1, 0, -1, -2, -3, -4, -3, -2, -1, 0, 0, 0]

另一件事是,由于存在噪声,并且我的采样频率不是无限大的,所以我不会得到恰好为零的值。因此,我需要查找一个范围内的值,比如range(-0.1,0.1)。

我查看了numpy库,numpy.where()看起来可能是正确的工具,但我在实现它时遇到了问题。我是一个EE,几乎没有编程经验,所以任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-13 08:12:08

代码语言:javascript
复制
>>> l = np.array([-3, -2, -1, 0, 1, 2, 3, 4, 3, 2, 1, 0, -1, -2, -3, 4, -3, -2, -1, 0, 1, 2])
>>> epsilon = 1
>>> inds = np.argwhere(np.abs(l) < epsilon) # indices of “almost zero” items
>>> left = inds[0] # index of the first “almost zero” value
>>> right = inds[-1] # -//- last
>>> l[:left + 1] = 0 # zero out everything to the left and including the first “almost zero”
>>> l[right:] = 0 # -//- last
>>> l
  >
array([ 0,  0,  0,  0,  1,  2,  3,  4,  3,  2,  1,  0, -1, -2, -3,  4, -3,
   -2, -1,  0,  0,  0])
票数 3
EN

Stack Overflow用户

发布于 2013-06-14 03:00:31

你的回答是非常有用的kirelagin,但我对你将值设置为0的部分有问题。我对Python不是很有经验,但在我看来,您不能像在某些语言中那样用等号填充数组。取而代之的是,我最终做了这样的事情:

代码语言:javascript
复制
    epsilon = 1
    length = len(l)
    inds = np.argwhere(np.abs(l)<epsilon)
    left = inds[0]
    right = inds[-1]
    del l[:left]
    del l[right-left+1:]
    for x in range (0,left):
        l.insert(x,0)
    endzeros = length - right -1
    for x in range (0, endzeros):
        l.append(0)

insert函数将0添加到数组的开头,append函数将0添加到数组的末尾。这个解决方案对我来说工作得很好,尽管我确信有一种更优雅的方法可以用我不知道的不同值来替换数组中的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17077310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档