比较数组numpy的连续值

时间:2014-07-10 14:47:38

标签: arrays numpy

我有一个矢量A,我想找到所有的"我"数组的值大于相邻值,即恰好在(i-1)之前和之后(i + 1)。我写了一个简单的代码(肯定有错误)应该打印包含" i"的数组(y_maxtab)。值。我试着跑,它堆积起来。你可以帮帮我吗?

import numpy as np

y_maxtab = []


A=np.array([2.0,2.5,1.7,5,7,8,9,3,5,3,7,8])

i=1

while i <= len(A):
   if A[i] > A[i-1] and a[i] > A[i+1]:
         y_maxtab.append(A[i])
         i=i+1
print y_maxtab

2 个答案:

答案 0 :(得分:1)

好吧,你的代码有一些问题。

  1. 如果第一个if语句失败,您将永远不会增加i,并且会陷入无限循环。
  2. if语句的第二个子句有一个未定义的引用(a)。
  3. while语句将允许i的值,IndexError A[i]A[i+1]会导致i = 1 while i < len(A)-1: if A[i] > A[i-1] and a[i] > A[i+1]: y_maxtab.append(A[i]) i=i+1 print y_maxtab # [2.5, 9.0, 5.0]
  4. 如果您致力于保持代码的形式相同,则可以将其更改为

    for first, middle, last in zip(A[:], A[1:], A[2:]):
        if first < middle > last:
            y_maxtab.append(middle)
    print y_maxtab
    # [2.5, 9.0, 5.0]
    

    但是,更加pythonic的方式就像

    {{1}}

答案 1 :(得分:1)

这是一个直接使用numpy的解决方案。比python循环更快,更清洁,而且,它可以实现您的目的。

local_maximum = (A[:-2]<A[1:-1]) & (A[2:]<A[1:-1])
print A[1:-1][local_maximum]

或稍微冗长,但可能更具可读性:

left, mid, right = A[:-2], A[1:-1], A[2:]
local_maximum = (left<mid) & (right<mid)
print mid[local_maximum]