Ich habe eine große Datenmenge (es kann Tausende und Zehntausende von Werten sein). Diese Daten sind ein Ergebnis in einem Array gesammelt Experimente:Divide Daten-Array in effizienter Weise Matlab
data = [2.204000000000000
2.202000000000000
2.206000000000000
2.201000000000000
...
]
Und ich habe Zeit Array t
der gleichen Größe:
t = [1 2 3 ... 65 66 1 2 3 4 ... 72 73 1 2 3 ... 75]';
Diese t
ist eine Zeit, die Daten erfasst wurden. So t = 1:66
- ist ein erster Versuch, und dann t
Werte beginnt wieder von 1
- es ist, Daten von 2 Experiment und etc. Was ich tun möchte: divide Daten durch die spezifischen Zeitintervallen:
t<=1
1<t<=4
4<t<=6
t>6
Ich gehe Auf diese Weise
part1 = []; part2 = []; part3 = []; part4 = [];
for ii = 1: size(data,1)
if (t(ii)) <=1 % collect all data corresponds to t<=1
part1 = [part1; ii];
elseif (t(ii) >1 && t(ii) <=4)
part2 = [part2; ii];
elseif (t(ii) >4 && t(ii) <=6)
part3 = [part3; ii];
else
part4 = [part4; ii];
end
end
data1 = data(part1);
data2 = data(part2);
data3 = data(part3);
data4 = data(part4);
das funktioniert perfekt, aber es ist langsam, weil:
- ich nicht
part1 part2 part3 part4
preallocate kann - Ich kenne ihre Größen nicht; - Verwenden Sie
for
Schleife.
Können wir es eleganter und schneller machen?
Jetzt habe ich eine Idee, ein Zellenarray anstelle von 4 verschiedenen zu verwenden. Jetzt verwende ich part{1} part{2} ... part{4}
. So kann ich es als part = cell(4,1);
Ahhh wirklich, ich denke nur darüber nach :) einfache Lösung! All mein Missverständnis lag daran, dass ich überall Zellenzellen benutze (die nur zur besseren Lesbarkeit durch numerische Arrays ersetzt wurden). Also das 't {1,1} (1: ende)' und etc. nur meine Augen und ich kann das nicht sehen :) Danke! –
@Mikhail_Sam Vielen Dank, dass Sie sich die Zeit genommen haben, eine vereinfachte Version Ihres Codes zur Verfügung zu stellen. Ja, wie Sie erwähnen, ist es bei numerischen Arrays etwas weniger verschleiert als bei Zellen-Arrays, aber es funktioniert gut bei beiden. Ich habe meine Antwort mit interessanteren Links aktualisiert, die Sie vielleicht hilfreich finden. Prost! – codeaviator