I am running a for loop on 10 million lines of data and it has taken over a day and is still running. I have preallocated the array I am modifying according to suggestions provided by Matlab for optimizing runtime. This post says 100 million lines of data ran in a simple for loop in 0.2 seconds. I am testing my code both on my personal computer (Mac) and a remote server. Why is my code so slow?? %% read in file cwaFileToRead = '6011549_0000000003.cwa'; ptID = '6011549_0000000003'; sampling_rate = 100; Fs = sampling_rate; output_dir = ''; rawData = CWA_readFile(cwaFileToRead, 'verbose', 0); %% calculate vector magnitude xRaw = rawData.AXES(:,2); yRaw = rawData.AXES(:,3); zRaw = rawData.AXES(:,4); vmRaw = sqrt((xRaw.^2)+(yRaw.^2)+(zRaw.^2)); vmRaw = vmRaw.*(1000); numrows=size(vmRaw); peak=zeros(numrows);%add empty rows for peak identification time = datetime(rawData.AXES(:,1), 'ConvertFrom', 'datenum'); % convert mtime to datetime timedata = timetable(time, xRaw, yRaw, zRaw, vmRaw, peak); % convert data to timetable %% CHECK FOR UNIFORM SAMPLING, RESAMPLE IF NOT UNIFORM % Check if sampling rate is uniform isUniform = isregular(timedata); % If sampling rate is non-uniform, resample at regular sampling intervals if isUniform == 0 timeStep = seconds(1/Fs); % how long between each regular sample regularizedData = retime(timedata,'regular','linear','TimeStep',timeStep); fprintf('Sampling rate is non-uniform, resampling using linear interpolation\n') else regularizedData = timedata; end %FOR LOOP THAT IS SO SLOW!! HELP! tic for row = 2:numrows-1 if regularizedData.vmRaw(row)>regularizedData.vmRaw(row-1)&& regularizedData.vmRaw(row)>regularizedData.vmRaw(row+1) regularizedData.peak(row)=1; else regularizedData.peak(row)=0; end end toc
Neeta Dsouza answered .
2025-11-20
I don't see why it would be slow, but there's no need for a for loop at all,
regularizedData.peak(2:end-1) = regularizedData.vmRaw(2:end-1)>regularizedData.vmRaw(1:end-2)&...
regularizedData.vmRaw(2:end-1)>regularizedData.vmRaw(3:end);