I need this section of my code to run faster, as it is called many many times. I am new to Matlab and I feel as though there MUST be a way to do this that is not so round-about. Any help you could give on how to improve the speed of what I have or other functions to look into that would help me perform this task would be appreciated.
(Task is to get only lines of “alldata” where the first column is in the set of “minuteintervals” into “alldataMinutes”. “minuteintervals” is just the minimum value of “alldata” column one increasing by twenty to the maximum of 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),:)= [];
This should give you what you want, and it should be substantially faster:
This works by passing a vector of values to the function ISMEMBER, instead of passing values one at a time. The output
indexis a logical vector the same size asalldata(:,1), with a value of 1 (i.e. true) for elements ofalldata(:,1)that are in the setminuteintervals, and a value of 0 (i.e. false) otherwise. You can then use logical indexing to easily extract the rows corresponding to the ones inindex, placing them inalldataMinutes.