Parsing an array A based on trigger data in array B ?
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi everyone!
I have what should be a simply question but I cannot seem to find an effective solution. I have two columns of data in Excel files that I read into Matlab, at the moment as two separate arrays (column A and B).
Column A contains numeric data and Column B is a trigger stamp for the data in A. Example:
What I need to do is to parse A and split it into a number of (30) arrays depending on the trigger point in B i.e. the very large A would become A1, A2, A3 ... A30, split according to when there is a data-stamp in B.
2 commentaires
Jan
le 3 Juil 2013
Please post how you "read the Excel file". Then creating a matching answer is easier.
Réponse acceptée
Chad Gilbert
le 3 Juil 2013
If I save similar data out as a .csv file:
A,B
1.303,1
1.61,
4,2
1.213,
and then read them in with:
>> a = csvread('a.csv',1,0)
I get a matrix the same shape as your data, with 0's filling all the empty spots:
a =
1.3030 1.0000
1.6100 0
4.0000 2.0000
1.2130 0
This will be pretty easy to parse into a cell array of arrays.
3 commentaires
Chad Gilbert
le 3 Juil 2013
Modifié(e) : Chad Gilbert
le 3 Juil 2013
Ah, I see. I thought your trouble was with reaading. To split it up, Rob's answer ought to work. Or a shorter version might be:
ind = [find(a(:,2)>0); size(a,1)+1];
b = arrayfun(@(i)a(ind(i):ind(i+1)-1),1:length(ind)-1,'uniformoutput',false)
Plus de réponses (1)
Rob
le 3 Juil 2013
Modifié(e) : Rob
le 3 Juil 2013
I'm sure there are more elegant solutions, but here's one way:
idx1 = find(~isnan(B));
idx2 = [idx1(2:end)-1; length(A)];
C = cell(length(idx1), 1);
for k = 1:length(idx1)
C{k} = A(idx1(k):idx2(k));
end
If the non trigger values in B are zeros then:
idx1 = find(B>0);
-Rob
0 commentaires
Voir également
Catégories
En savoir plus sur String Parsing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!