Randomly Appearing Zeros in Data Output

15 ビュー (過去 30 日間)
Mary
Mary 2014 年 3 月 31 日
コメント済み: Mary 2014 年 4 月 1 日
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 件のコメント
dpb
dpb 2014 年 3 月 31 日
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 2014 年 4 月 1 日
Thank you I'll give debug a try!

サインインしてコメントする。

採用された回答

Joseph Cheng
Joseph Cheng 2014 年 3 月 31 日
編集済み: Joseph Cheng 2014 年 3 月 31 日
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 件のコメント
Mary
Mary 2014 年 4 月 1 日
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!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by