Organizing Vectors into Structs then Structs into a Matrix

조회 수: 2 (최근 30일)
Mary
Mary 2014년 3월 5일
답변: Mary 2014년 3월 5일
Okay I'm working with some kind of confusing code so I'm going to do my best to explain things without copying the exact code I'm using.
I have a bunch of files I need to process which contain two related vectors, one vector is time (non linear) and the other vector contains amplitude values.
I'm trying to separate the vectors into structs of trials, each trial being 40 seconds long. (so any values between 0 and 40 seconds would be trial 1, any values between 41 and 81 would be trial 2.. etc)
My problem stems from writing the data into structs, if I have two values within one trial they get overwritten.
Example Vectors:
Time: 01, 05, 28, 43, 56, 69, 80, 102, 165
Amp: .0012, .005, .003, .456, .56, .098, .435, .454, .234
Example Code:
% Set up trial number and trial time
trialNum = 1;
trialTime = 40;
for i = 1: numel(files)
if time(i) <= trialTime;
trial(trialNum) = amp(i);
else
trialNum = trialNum +1;
trialTime = trialTime + 40;
trial(trialNum) = amp(i);
end
end
How can I change this so that it outputs things as a vector of values
For example with the given vectors the code would output:
trial(1) = [.0012,.005,.003]
trial(2) = [.456,.56,.098,.435]
trial(3) = [.435]
trial(4) =[0]
trial(5) = [.234]

채택된 답변

Walter Roberson
Walter Roberson 2014년 3월 5일
binnum = 1 + floor(Time(:) / 40);
trial = accumarray( binnum, Amp(:), [], @(V) {V});
Note: 0 to 40 is 41 seconds not 40. The above code uses 0 to 40-eps, 40 to 79-eps and so on. If you want to be using 1 to 41-eps, 41 to 81-eps, and so on, then
binnum = 1 + floor( (Time(:)-1) / 40);

추가 답변 (1개)

Mary
Mary 2014년 3월 5일
Thank you for such a quick response - I apologize for my delay in getting back to you.
THIS WORKS PERFECTLY and has saved me a TON of time.
Accumarray was just what I needed!!!

카테고리

Help CenterFile Exchange에서 Characters and Strings에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by