所以我和我的朋友在两周前做了一个实验,我们遇到了一些奇怪的事情。我应该这样说,如果这是一个愚蠢的问题并且看起来像是浪费时间,那么我真的没有编程。
假设我们有数据集A和数据集B(实验本身并不重要)。所有时间都是在分数日给出的。数据的格式应该全部匹配,但是为每个集合记录数据点的时间不一定是对齐的(它们每个都有自己的时间向量)。例如,每100ms记录数据集A的测量值。但是,数据集B的工具是对数据求平均值,并且每分钟只记录一次点。我的问题是调整收集的不同类型数据的时间。对于数据集A,数据和时间向量的长度为25042(25042x1 double)。数据集B及其时间向量的长度为828(828x1双)。
归结为我需要查看数据集B,并找到与数据中的峰值对应的时间。这些时间是我在数据集A中唯一感兴趣的时间。这就是为什么我需要一种方法来对齐时间向量/系列以及数据。如果无法得到精确的解,那么即使近似也会有很大的帮助。有没有人有任何想法?
答案 0 :(得分:1)
因此,您有两个时间向量:tA
和tB
,以及包含已知峰值的时间索引bIndices
的向量。这对应于时间tB(bIndices(:))
。您需要循环遍历整个向量bIndices
,每次完整搜索整个向量tA(:)
,直到时间大于或等于tB(b)
bIndices = [101, 403,...]; %Vector containing the indices of the peaks in 'tB'
aIndices = []; %Allocate an empty vector
A = []; %Allocate an empty vector
B = []; %Allocate an empty vector
for b = bIndices %This will cycle through all peak indices one at a time setting 'b' to the current single index
B = [B tB(b)]; %Retrieve the actual time using the index, concatenate it
for a = 1:length(tA) %Loop through the entire time vector tA
if (tA(a) >= tB(b)) %Time is greater than or equal
%Concatenate the newly found index 'a' from tA to the vector aIndex:
aIndices = [aIndices a];
%Concatenate the newly found time 'tA(a)' to the time vector A:
A = [A tA(a)]; %Or if you want the actual time
break; %Exit the inner loop, search for the next index `b`
end
end
end
最后,A
存储了一个匹配B
中所有时间的峰值时间数组(大约可能稍后)。 A-B
是两次之间的差异(两个向量应该是相同的长度),但它应该非常小,任何零都意味着2在这些实例中完美对齐。 aIndices
是所需时间tA
的相应索引。我实际上并没有测试这段代码,希望我的逻辑是合理的。