我已经编写了相当多的程序,我必须比较顺序列或行中的元素。不幸的是,最简单的方法 - 将元素n与元素n + 1进行比较(例如,如果矩阵(n)>矩阵(n + 1))具有导致程序错误的固有弱点,一旦到达最后一个元素数组,因此,引用超出矩阵维度的元素。有没有有效的方法来进行这样的比较而不遇到这个特定的问题?
重要的是,数据不能被忽略,因此需要访问这些示例中的最后一个元素,但显然不会将其与超出它的任何内容进行比较。
具体的理论示例如下:我有100个带时间戳的列。我将逐个单元格地查看邮票是否在特定范围内(例如在250毫秒的范围内),因此我可以将它们分类为块。因此,如果第一个单元格在0-250之间,则它将进入第1个块,如果它在250-500之内则进入第2个块,等等。我的一个问题是多个单元可以在同一个块中(例如,单元格1可以在块1,但是单元2和单元3也可以在块2)中,所以作为确定哪个单元进入哪里的一部分,我有一个块(m)的计数器,并且在将当前单元(n)放入适当的块之后,我检查单元格n + 1的时间戳,如果它大于m + 1,我将块计数器增加1。
显然,我是按顺序引用的,并且会遇到上面指定的问题。当我到达最后一个单元格时,不需要对n + 1进行比较,所以我只是将它推入适当的块中。但是我现在设置它的方式我使用for循环来访问所有数组元素1:n。似乎应该有更好的方法来做到这一点。或者只是一个额外的“如果声明”的问题'对于最后一个数组元素?
编辑:所以这是我现在拥有的一个例子。它来自一个更大的计划,所以我会尽力澄清。
binsize = 250; %In ms
triallength = 16 * 1000; %In ms; 16 = trial time in seconds
timepoints = [0:binsize:triallength];
bincounter = 1;
numtrials = 27;
for h = 1:numtrials
for k = 1:length(input) %e.g. input here is 100x1
if input(k,1) >= timepoints(1,bincounter) && input(k,1) < timepoints(1,bincounter) + binsize
outputmatrix(h, bincounter) = fixtimeleft; %Where variable 'fixtimeleft' was calculated elsewhere and variable 'outputmatrix' is of size numtrialsXtimepoints
if input(k+1,1) > timepoints(1,bincounter) && input(k+1,1) < timepoints(1,bincounter) + binsize %This is the offending line
;
else
bincounter = bincounter+1;
end
end
end
end
对于混乱感到抱歉但这是从一个更大的程序中提取的,其中正在进行与问题无关的其他处理 - 我只是试图保留相关的东西,但意识到可能会使这很难理解,所以我可以如有必要,请提供任何澄清。