我需要我的代码的这一部分运行得更快,因为它被多次调用。我是Matlab的新手,我觉得必须有一种方法可以做到这一点,而不是那么圆。您可以提供有关如何提高我所拥有的速度或其他功能的任何帮助,这将有助于我执行此任务,将不胜感激。
(任务是只获取“alldata”的行,其中第一列在“minintervals”的集合中为“alldataMinutes”。“minuteintervals”只是“alldata”列的最小值,增加了20到最大的alldata。
minuteintervals= min(alldata(:,1)):20:max(alldata(:,1)); %20 second intervals
alldataMinutes= zeros(30000,4);
counter=1;
for x=1:length(alldata)
if ismember(alldata(x,1), minuteintervals)
alldataMinutes(counter,:)= alldata(x,:);
counter= counter+1;
end
end
alldataMinutes(counter:length(alldataMinutes),:)= [];
答案 0 :(得分:1)
这应该会给你你想要的东西,它应该大大加快:
minuteintervals = min(alldata(:,1)):20:max(alldata(:,1)); %# Interval set
index = ismember(alldata(:,1),minuteintervals); %# Logical index showing first
%# column values in the set
alldataMinutes = alldata(index,:); %# Extract the corresponding rows
这可以通过将值的向量传递给函数ISMEMBER来实现,而不是一次传递一个值。输出index
是与alldata(:,1)
大小相同的logical向量,对于集合{{1}中的alldata(:,1)
元素,值为1(即true)否则,值为0(即false)。然后,您可以使用logical indexing轻松提取与minuteintervals
中的行相对应的行,并将其放入index
。