我有一个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等的内容,但还没有找到办法(或者更有可能,我还没有理解什么是可能的) 。有什么建议吗?
答案 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])