Arrays 比较数组numpy的连续值
我有一个向量a,我想找到数组中大于相邻值的所有“I”值,即在(I-1)之前和(I+1)之后。我编写了一个简单的代码(肯定有错误),它应该打印包含“I”值的数组(y_maxtab)。我试着跑,结果它被堆积起来了。你能帮我吗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]
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]