我有一个矢量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
答案 0 :(得分:1)
好吧,你的代码有一些问题。
if
语句失败,您将永远不会增加i
,并且会陷入无限循环。if
语句的第二个子句有一个未定义的引用(a
)。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]
。如果您致力于保持代码的形式相同,则可以将其更改为
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]