我有一个 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 等的信息,但还没有找到执行此操作的方法(或者更可能的是,我不明白什么是可能的)。有什么建议吗?
最佳答案
您需要 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])
关于python - 比较 numpy 数组中的相邻值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38449670/