我有一个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
?目前,它会覆盖每次迭代的时间。
答案 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将告诉您迭代时特定条件何时失败。