如何将时间数据插入矩阵?

时间:2015-01-31 08:23:04

标签: matlab

我有一个while循环L<=100,每次鼠标改变位置时我都会花时间:

[newX,newY,newbutton]= GetMouse (window); % Controls mouse position 

if  ((newX~=xCenter )||( newY~=yCenter)) &&  (elapsed_Response_latency==0);
elapsed_Response_latency=toc;

如何在每个循环中保存所有elapsed_Response_latency?目前,它会覆盖每次迭代的时间。

1 个答案:

答案 0 :(得分:0)

首先使elapsed_response_Latency成为一个空数组,以便稍后填充。接下来,在每次单击鼠标时,只需结果连接到数组。此外,我建议您更改您的逻辑,以便首先获得延迟,检查延迟是什么,然后然后将此添加到阵列。我认为这就是你要做的事情(如果我错了,请纠正我)。所以这样做:

elapsed_Response_latency = [];

%// Further set up...

% // Start loop ...

    [newX,newY,newbutton]= GetMouse (window); % Controls mouse position 

    t = toc; %// Save time here
    if  ((newX~=xCenter )||( newY~=yCenter)) && (t == 0)
        elapsed_Response_latency = [elapsed_Response_latency t]; %//NEW
    end

我们需要更改逻辑的原因是因为elapsed_Response_latency现在将成为一个数组,所以如果您尝试执行elapsed_Response_latency == 0,那么您将比较所有元素为零,这可能不是你的目标。在每次迭代时,每次执行鼠标单击时,如果鼠标位置移动,我们将结果水平叠加


但是,因为你有一个预先建立次数的while循环运行循环,所以当涉及内存和访问时,MATLAB建议你预分配使用它之前的数组。因此,初始化你的数组,使它只是一堆-1,总共有100个。我之所以说-1是因为在每次迭代时,如果我们没有在if语句中传递条件,那么这些特定位置将保持为-1,因此我们将更容易过滤掉。如果我们将它们设为零,那么您可能会有一个0(可能)的延迟,因此您需要考虑这些因素。

在任何情况下,在while循环内,使用与while循环关联的索引索引到此数组中的特定位置,然后从那里开始。像这样:

L = 1;
num_iterations = 100;
elapsed_Response_latency = -1*ones(1,num_iterations);

while L <= num_iterations

    %// Do some stuff

    %// Your code
    [newX,newY,newbutton]= GetMouse (window); % Controls mouse position 

    t = toc; %// Save time here
    if  ((newX~=xCenter )||( newY~=yCenter)) && (t == 0)
        elapsed_Response_latency(L) = t; %//NEW
    end
    L = L + 1; %// Increment counter
end

%// Filter out bad times
elapsed_Response_latency(elapsed_Response_latency == -1) = [];

但是,如果您想查看鼠标未移动或延迟时间不够的情况,您可以在其中保留-1s,或者不要在上面的代码中执行最后一个语句。 -1将告诉您迭代时特定条件何时失败。