Randomly Appearing Zeros in Data Output

13 views (last 30 days)
Hello!
I'm still working on some code I have asked about in previous questions. All seems to be going well except in my output I keep getting zeros unexpectedly and I can't seem to figure out why
The code opens data, uses accumarray to place the data into vectors and then writes the output of the vectors into a matrix. For some reason I seem to get random rows of zero in this matrix - and I cant seem to find out why
The code is below:
% Cycle through files rownum = 1;
for f = 1: numberOfFiles resFileName = fullfile(res_files,baseFileNames(f).name) Name = baseFileNames(f).name rawData = importdata(resFileName,' ');
timeData = rawData.data(:,1);
ampData = rawData.data(:,2);
PIDget = Name(3:5)
PID = str2num(PIDget)
Task1.PID{f} = PID;
binnum = 1 + floor(timeData(:) / 39);
Task1.Amp(f).trial = accumarray( binnum, ampData(:), [], @(V) {V})
Task1.Time(f).trial = accumarray( binnum, timeData(:), [], @(V) {V})
numtrial = numel(Task1.Amp(f).trial)
% for trialnum = 1:numel(Task1.Amp(f).trial)
binnum(end)
for trialnum = 1:binnum(end)
for numbers = 1:numel(Task1.Amp(f).trial{trialnum})
timedata = Task1.Time(f).trial{trialnum}(numbers);
ampdata = Task1.Amp(f).trial{trialnum}(numbers);
DATA_raw(rownum,1) = PID;
DATA_raw(rownum,2) = trialnum;
DATA_raw(rownum,3) = timedata;
DATA_raw(rownum,4) = ampdata;
rownum = rownum + numbers;
end
end
end
The output data file DATA_Raw looks like this...
2 3 114.080000000000 0.218000000000000
0 0 0 0
0 0 0 0
0 0 0 0
2 4 120.260000000000 0.0350000000000000
Where are these zero's coming from???
Thanks, ML
  2 Comments
dpb
dpb on 31 Mar 2014
Where is there an "output data file" or do you just mean the array in memory?
W/o any data to be able to see for certain it's not possible to say for absolute certain, but a reasonable conjecture is that your accumarray indices aren't what you think they are.
Best recommendation I can give is to use the debugger and step thru your code watching what happens as you process the data. I'll wager you'll find an "ah-ha!" moment when all becomes clear...now that may engender some other questions on how to best handle what you find, but I'll bet you find out the "why". :)
Mary
Mary on 1 Apr 2014
Thank you I'll give debug a try!

Sign in to comment.

Accepted Answer

Joseph Cheng
Joseph Cheng on 31 Mar 2014
Edited: Joseph Cheng on 31 Mar 2014
I am suspecting that it is coming from your rownum = ronum+numbers.
From your snippit rownum starts at 1 and then gets incremented by numbers. It's basically defining a row in DATA_raw and then defining another row at (rownum+numbers) further down for the next iteration. since numbers isn't 1 you won't get sequential rows of data. When that happens MATLAB will zero fill the empty spaces.
simple display of whats happening
x=rand(1,4)
x(5,:)=rand(1,4)
I see where this may have worked if you get PID, trailnum, etc as size numbers*1 matrix where you'd need to increment the indexing by numbers and not just 1. However you'll additionally need to DATA_raw(rownum:rownum+numbers-1,1) which will get a numbers*1 matrix to go into that space.
  1 Comment
Mary
Mary on 1 Apr 2014
Thank you! The example you gave was really helpful - I should have realized that sooner.
Hopefully fixing the way numbers is called will clean things up!
Thank you for such a quick and thoughtful response!

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!