将数据重采样到目标网格
Resampling data to target grid
有没有有效的方法可以解决以下问题?
假设我们有这两个列表。它们代表非均匀采样数据:
MeasTimes = [0, 2, 4, 6, 8, 11, 12, 14, 18, 20, 22]
MeasValues = [-1, 0, 1, 0, -1, 0.5, 1, 0, 0, 1, 0]
如何将来自该测量的数据插入到目标网格中?
示例:
TargetTimes = [0, 5, 10, 15, 18, 20] # given
我认为有时您提供了错误的数据(5 和 10)
密码是
MeasValuesAtTargetTimes=[MeasValues[MeasTimes.index(i)] for i in TargetTimes]
meas_times = [0, 2, 4, 6, 8, 11, 12, 14, 18, 20, 22]
meas_values = [-1, 0, 1, 0, -1, 0.5, 1, 0, 0, 1, 0]
def get_value(target_value):
if target_value in meas_times:
return meas_values[meas_times.index(target_value)]
else:
upper_index, upper_time = next((i, e) for i, e in enumerate(meas_times) if e > target_value)
lower_value, upper_value = meas_values[upper_index - 1], meas_values[upper_index]
abs_dt = float(abs(lower_value) + abs(upper_value)) / (upper_time - meas_times[upper_index - 1])
if upper_value > lower_value:
return lower_value + abs_dt * (target_value - meas_times[upper_index - 1])
else:
return lower_value - abs_dt * (target_value - meas_times[upper_index - 1])
target_times = [0, 5, 10, 15, 18, 20]
print map(get_value, target_times)
# [-1, 0.5, 0.0, 0.0, 0, 1]
有没有有效的方法可以解决以下问题?
假设我们有这两个列表。它们代表非均匀采样数据:
MeasTimes = [0, 2, 4, 6, 8, 11, 12, 14, 18, 20, 22]
MeasValues = [-1, 0, 1, 0, -1, 0.5, 1, 0, 0, 1, 0]
如何将来自该测量的数据插入到目标网格中? 示例:
TargetTimes = [0, 5, 10, 15, 18, 20] # given
我认为有时您提供了错误的数据(5 和 10)
密码是
MeasValuesAtTargetTimes=[MeasValues[MeasTimes.index(i)] for i in TargetTimes]
meas_times = [0, 2, 4, 6, 8, 11, 12, 14, 18, 20, 22]
meas_values = [-1, 0, 1, 0, -1, 0.5, 1, 0, 0, 1, 0]
def get_value(target_value):
if target_value in meas_times:
return meas_values[meas_times.index(target_value)]
else:
upper_index, upper_time = next((i, e) for i, e in enumerate(meas_times) if e > target_value)
lower_value, upper_value = meas_values[upper_index - 1], meas_values[upper_index]
abs_dt = float(abs(lower_value) + abs(upper_value)) / (upper_time - meas_times[upper_index - 1])
if upper_value > lower_value:
return lower_value + abs_dt * (target_value - meas_times[upper_index - 1])
else:
return lower_value - abs_dt * (target_value - meas_times[upper_index - 1])
target_times = [0, 5, 10, 15, 18, 20]
print map(get_value, target_times)
# [-1, 0.5, 0.0, 0.0, 0, 1]