比较numpy数组中的相邻值

时间:2016-07-19 04:36:37

标签: python arrays numpy

我有一个Numpy一维数据数组,就像这样

a = [1.9, 2.3, 2.1, 2.5, 2.7, 3.0, 3.3, 3.2, 3.1]

我想创建一个新数组,其中值由较大的相邻值组成。对于上面的示例,输出将是:

b = [2.3, 2.3, 2.5, 2.7, 3.0, 3.3, 3.3, 3.2]

我可以通过循环输入数组,比较相邻值来实现这一点,例如:

import numpy as np

a = np.array([1.9, 2.3, 2.1, 2.5, 2.7, 3.0, 3.3, 3.2, 3.1])
b = np.zeros(len(a)-1)

for i in range(len(a)-1):
    if (a[i] > a[i+1]):
        b[i] = a[i]
    else:
        b[i] = a[i+1]

但我想在更优雅的#pythonic"中做到这一点。矢量化的时尚。我已经搜索并阅读了关于np.zip,np.where,np.diff等的内容,但还没有找到办法(或者更有可能,我还没有理解什么是可能的) 。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

您希望元素最大值为a[1:]a[:-1]

>>> a
array([ 1.9,  2.3,  2.1,  2.5,  2.7,  3. ,  3.3,  3.2,  3.1])
>>> a[1:]
array([ 2.3,  2.1,  2.5,  2.7,  3. ,  3.3,  3.2,  3.1])
>>> a[:-1]
array([ 1.9,  2.3,  2.1,  2.5,  2.7,  3. ,  3.3,  3.2])
>>> np.maximum(a[1:], a[:-1])
array([ 2.3,  2.3,  2.5,  2.7,  3. ,  3.3,  3.3,  3.2])