0

我有一系列数据集,每个数据集大约 1032 x 4。通过我现在拥有的程序,我可以找到某个事件发生的时间(我通过结构做到了)。我得到的输出是:

startTime: [1 84 111 251 450 482 613 660 787 951 956]
 endTime: [5 90 112 252 451 485 619 661 788 952 961]

这个输出告诉我我感兴趣的事件从哪一行到哪一行发生。所以我想得到从第 1 行到第 5 行、从第 84 行到第 90 行、从 111 到 112、从 251 到 252 等的值序列。我可以通过键入time(1), time(5),来手动完成time(84)time(90)所以我可以计算持续时间的事件。但是有没有办法自动做到这一点?

请帮忙 !!这听起来很容易,但它让我发疯。

提前致谢,

我到目前为止的代码是:

function DetectEvent = DetectEvent(inputData, ColumnNumbers)
%ColumnNumbers = 1 contains Time
%ColumnNumbers = 2 contains Position
%ColumnNumbers =3 contains velocity
%ColumnNumbers=4 contains accelereation

eventNow = false;
event.startTime = []; % initialise
event.endTime = []; % initialise
for i = 1: length(inputData)
if abs(inputData(i,ColumnNumbers.velocity)) == 0 
    if ~eventNow
        eventNow = true;
        thisevent.startTime = i;
    end
else
    if eventNow
        eventNow = false;
        thisevent.endTime = i - 1;
        event.startTime = [event.startTime, thisevent.startTime];
        event.endTime = [event.endTime, thisevent.endTime];
    end
end
end
4

1 回答 1

0

您可以将startTimeand用作与(:)endTime组合的索引。colon operator

例如,要获取在 i 记录的事件(例如,您可以使用开始startTime(i)和结束于(假设您的 1032x4 矩阵被调用):endTime(i)data

events=data(startTime(i):endTime(i),:);

这将放入矩阵中的events所有行中。startTime(i)endTime(i)data

于 2013-05-08T12:44:55.730 回答