我有眼动追踪实验的瞳孔大小数据。在实验中,为了开始每个试验,参与者在屏幕的中心查看1000毫秒(前缀期),然后开始试验。如果它们移开或闪烁,则1000 ms周期重新开始。因此,每个试验都有不同的长度前缀期。当我创建一个矩阵(每行是一个不同的试验,每列都是随时间变化的瞳孔尺寸样本)时,它会根据具有最长前缀周期的试验创建具有列数的矩阵,然后添加不同数量的NaNs到彼此行的末尾。我需要提取每个试验的最后200个样本(列),但由于添加了额外的NaN,这些不是矩阵的最后200列。
目前我有这个:
Row1 = PreFixBase(1,:); % extract the first row
Row1(isnan(Row1)) = []; %get rid of the NaNs
Row1Base = Row1(end-200+1:end); %extract the last 200 samples / columns
我分别为每一行做,然后将它们粘贴在一起。它有效,但效率非常低(我有324行/试验),我确信必须有一个更简洁的方法,但是还没有找到答案。
任何帮助表示感谢。
艾米
答案 0 :(得分:1)
您可以使用cumsum
+逻辑索引来提取所需的元素
Base = PreFixBase.'; % transpose the matrix
S=cumsum(~isnan(Base),1,'reverse'); % number last non NaN columns from 1 to 200 (from end to begin)
Result = reshape(Base(S> 0 & S<=200),200,[]).'; % extract data and reshape to the correct size