Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 比较数组numpy的连续值_Arrays_Numpy - Fatal编程技术网

Arrays 比较数组numpy的连续值

Arrays 比较数组numpy的连续值,arrays,numpy,Arrays,Numpy,我有一个向量a,我想找到数组中大于相邻值的所有“I”值,即在(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”值,即在(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
将numpy导入为np
y_maxtab=[]
A=np.数组([2.0,2.5,1.7,5,7,8,9,3,5,3,7,8])
i=1
而我A[i-1]和A[i]>A[i+1]:
y_maxtab.append(A[i])
i=i+1
打印y_maxtab

好吧,您的原样代码有一些问题

  • 如果第一个
    If
    语句失败,您将永远不会递增
    i
    ,并将陷入无限循环
  • if
    语句的第二个子句有一个未定义的引用(
    a
  • while
    语句将允许
    i
    的值,这将导致
    索引器
    s带有
    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]
    
    i=1
    而iA[i-1]和A[i]>A[i+1]:
    y_maxtab.append(A[i])
    i=i+1
    打印y_maxtab
    # [2.5, 9.0, 5.0]
    
    然而,一种更具python风格的方式可能是

    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]
    
    对于zip中的第一个、中间个和最后一个(A[:],A[1:],A[2:]):
    如果第一个<中间>最后一个:
    y_maxtab.append(中间)
    打印y_maxtab
    # [2.5, 9.0, 5.0]
    
    这里有一个直接使用numpy的解决方案。比python循环快得多,更干净,而且,它做了您想要做的事情

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

    local_max=(A[:-2]+1,用于指出和修复错误。但是
    zip()中的索引
    有点不一致。因为
    zip
    在最短的iterable用完后就会停止,所以我不小心。对我来说,它最有意义,因为我编辑了它,尽管@Eelco的答案中写的方式可能比某些人更可取。我同意,
    zip
    的这种行为是众所周知的,而且看起来更好,因为否决票是由于没有使用
    numpy
    的功能,但是OP似乎不知道什么时候应该在
    list
    上使用
    numpy.array
    。我更正的代码工作得很好,也是更具Python风格的版本,非常感谢!!
    left, mid, right = A[:-2], A[1:-1], A[2:]
    local_maximum = (left<mid) & (right<mid)
    print mid[local_maximum]