繁体   English   中英

1D数据的区间平均值

[英]Interval average of 1D data

我有两个一维数组,一个用于测量数据,另一个用于位置。 例如,测量数据可以是温度,另一个数组是测量的高度:

temp = np.asarray([10, 9.6, 9.3, ..., -20.3, -21.0])  # Temperature in celsius
height = np.asarray([129, 145, 167, ..., 5043, 5112]) # Height in meters

如您所见,测量的高度不是有规律的间隔。

我想以规则间隔的高度间隔计算平均温度。 这是某种移动平均线,但窗口大小是可变的,因为感兴趣区间内的数据点并不总是相同的。

这可以通过以下方式使用for循环来完成:

regular_heights = np.arange(0, 6000, 100) # Regular heights every 100m
regular_temps = []

for i in range(len(regular_heights)-1):
    mask = np.logical_and(height > regular_heights[i], height < regular_heights[i+1])
    mean = np.mean(temp[mask])
    regular_temps.append(mean)

regular_temps = np.hstack((regular_temps))

我不太喜欢这种方法,我想知道是否会有一个更“笨拙”的解决方案。

您可能正在寻找UnivariateSpline 例如:

from scipy.interpolate import UnivariateSpline

temp = np.asarray([10, 9.6, 9.3, 9.0, 8.7])    # Temperature in celsius
height = np.asarray([129, 145, 167, 190, 213]) # Height in meters
f = UnivariateSpline(height, temp)

现在您可以在任何地方评估f

regular_heights = np.arange(120, 213, 5)       # Regular heights every 5m
plot(height, temp, 'o', regular_heights, f(regular_heights), 'x')

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM