例如,如果我有一个数组:
A = (0,2,3,4,5,2,1,2,3,4,5,6,7,8,7,6,5,4,5,6)
可以看出有4个转折点。(在A[4]、A[6]、A[13]、A[17])
如何使用python返回转折点的数目?
import numpy as np
import scipy.integrate as SP
import math
def turningpoints(A):
print A
N = 0
delta = 0
delta_prev = 0
for i in range(1,19):
delta = A[i-1]-A[i] #Change between elements
if delta < delta_prev: #if change has gotten smaller
N = N+1 #number of turning points increases
delta_prev = delta #set the change as the previous change
return N
if __name__ == "__main__":
A = np.array([0,2,3,4,5,2,1,2,3,4,5,6,7,8,7,6,5,4,5,6])
print turningpoints(A)
目前,这个系统有缺陷,当然不是很优雅。有什么想法吗?
如果你有numpy:
或非numpy等效版本:
只为一句俏皮话:
但这本书的可读性可能会降低:)
我知道这是个老问题,但我也遇到了同样的问题,正如Cardin在Malvolio's answer的注释中所说,答案不能处理具有相同值的连续点,如
[1, 2, 3, 4, 4, 4, 3, 2, 1]
。我的实现可以处理这个问题。尽管如此,它返回两个列表,其中包含最小和最大转折点的索引。
为了正确回答问题,转折点的数量计算如下:
示例
你想得太多了。一个“转折点”要么高于两边的点,要么低于两边的点。
相关问题 更多 >
编程相关推荐