【发布时间】:2015-06-26 10:12:49
【问题描述】:
我有两个数组 x 和 y 为:
x = np.array([6, 3, 5, 2, 1, 4, 9, 7, 8])
y = np.array([2, 1, 3, 5, 3, 9, 8, 10, 7])
我发现局部最小值和最大值的索引如下:
sortId = np.argsort(x)
x = x[sortId]
y = y[sortId]
minm = np.array([])
maxm = np.array([])
while i < y.size-1:
while(y[i+1] >= y[i]):
i = i + 1
maxm = np.insert(maxm, 0, i)
i++
while(y[i+1] <= y[i]):
i = i + 1
minm = np.insert(minm, 0, i)
i++
这段代码有什么问题?
答案应该是minima = [2, 5, 7]的索引
和maxima = [1, 3, 6]的那个。
【问题讨论】:
-
你在用
sortId=np.argsort(x); x=x[sortId]做什么? -
这个带有双
while循环的解决方案将非常慢(而且我什至没有谈论np.insert几乎在每次迭代时重新分配minm/nmax数组) .有关在 numpy 中正确执行此操作的方法,请参阅 stackoverflow.com/questions/4624970/…。 -
@mescalinum:我正在对 x 值进行排序,相应的索引将存储在 sortId 中。这样我就可以按顺序排列 y 值。
-
@Cleb : 我想要高峰和低谷。
-
@rth :实际上在我的数据集中,点是非常相邻的,所以你链接中提到的方法也在最大值和最小值周围给出了一些额外的点。
标签: python numpy derivative