Randomly Appearing Zeros in Data Output
14 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
dpb
am 31 Mär. 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". :)
Akzeptierte Antwort
Joseph Cheng
am 31 Mär. 2014
Bearbeitet: Joseph Cheng
am 31 Mär. 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.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!