必须有一些算法能让这比我正在做的更容易......
我所拥有的是两个数组,每个数组都有两列。两者中的一列是时间戳,另一列是测量值。
需要做的是将其转换为单个数组:timestamp,measurement1,measurement2
问题是时间戳通常不会完全匹配。一个数组可能在一段时间内完全丢失一个值,或者时间戳可能关闭的数量微不足道(不足以将两个测量值分配给相同的时间戳)。
有一些众所周知的做这种模糊合并操作的方法吗?一个简单的公共域函数??
答案 0 :(得分:1)
首先问自己这些问题:数组是否具有相同数量的元素?您想如何组合具有相同时间戳的两个项目?您想如何组合两个具有不同时间戳的项目?
您可能必须自己编写算法。这样的事情很容易实现:
〜
OutputArray merge(InputArray& a, InputArray& b) {
InputArray::iterator a_it = a.begin();
InputArray::iterator b_it = b.begin();
while(a_it != a.end() && b_it != b.end()) {
InputArray::iterator& early = *a_it.timestamp < *b_it.timestamp ? a_it : b_it;
InputArray::iterator& late = *a_it.timestamp < *b_it.timestamp ? b_it : a_it;
if(*late.timestamp - *early.timestamp < TIMESTAMP_CLOSE_ENOUGH) {
output.timestamp = (*late.timestamp + *early.timestamp) / 2; // mean value
output.measure1 = *a_it.measure;
output.measure2 = *b_it.measure;
outputArray.push_back(output);
a_it++; b_it++;
}
else {
output.timestamp = *early.timestamp;
output.measure1 = *a_it.timestamp < *b_it.timestamp ? *a_it.measure : outputArray.back.measure1; // previous value if missing
output.measure2 = *a_it.timestamp < *b_it.timestamp ? outputArray.back.measure2 : *b_it.measure;
outputArray.push_back(output);
early++;
}
}
InputArray::iterator& late = a_it != a.end() ? a_it : b_it;
InputArray::iterator late_end = a_it != a.end() ? a.end() : b.end();
while(late != late_end) {
output.timestamp = *late.timestamp;
output.measure1 = a_it != a.end() ? *a_it.measure : outputArray.back.measure1; // previous value if missing
output.measure2 = a_it != a.end() ? outputArray.back.measure2 : *b_it.measure;
outputArray.push_back(output);
late++;
}
return outputArray;
}