【问题标题】:Finding the index values where a certain value occurs in an array in Python在Python中查找某个值出现在数组中的索引值
【发布时间】:2013-06-12 23:57:37
【问题描述】:

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

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

[-3, -2, -1, 0, 1, 2, 3, 4, 3, 2, 1, 0, -1, -2, -3,  4, -3, -2, -1, 0, 1, 2]

我想检测零(实际上是每隔一个零),以便我可以制作数组:

[ 0,  0,  0, 0, 1, 2, 3, 4, 3, 2, 1, 0, -1, -2, -3, -4, -3, -2, -1, 0, 0, 0]

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

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

【问题讨论】:

  • 你的例子不清楚。因此,您希望在某个容差范围内找到零点。在您的示例中,左侧的负数和右侧的正数发生了什么?
  • @kirelagin “我的问题是我只想对正弦波的完整周期进行 FFT”。他希望将第一个接近零值的左侧(包括)所有内容归零,并将最后一个接近零值的右侧(包括)所有内容归零。特别是,他只停留在寻找第一个接近零的值和最后一个接近零的值。
  • @Patashu 是的,这是正确的。这绝对是解释我想要完成的事情的更好方式。

标签: python python-2.7 numpy


【解决方案1】:
>>> 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])

【讨论】:

    【解决方案2】:

    您的回答对 kirelagin 非常有帮助,但我在将值设置为 0 的部分存在问题。我在 Python 方面不是很有经验,但在我看来,您无法使用等号填充数组您可以使用某些语言。相反,我最终做了这样的事情:

        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添加到数组的末尾。这个解决方案对我来说非常好用,尽管我确信有一种更优雅的方法可以用我不知道的不同值替换数组中的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 2011-05-08
      • 2021-04-06
      相关资源
      最近更新 更多