私は大きなデータ配列を持っています(それは数千から数万の値になります)。このデータは、1列に集めた実験の結果である:より効率的な方法でデータ配列を分割するMatlab
data = [2.204000000000000
2.202000000000000
2.206000000000000
2.201000000000000
...
]
と私は同じ大きさの時間配列t
を持っている:
t = [1 2 3 ... 65 66 1 2 3 4 ... 72 73 1 2 3 ... 75]';
このt
は、データが収集された時間です。だから、t = 1:66
は - 最初の実験で、その後t
値が再び1
から始まります - それは私が何をしたいのか2実験のデータとなど です:特定の時間間隔で除算データ:私は行く
t<=1
1<t<=4
4<t<=6
t>6
- 私は
part1 part2 part3 part4
を事前に割り当てることができません。完璧に動作しますが、それが原因で遅いです、このよう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);
- 私はそのサイズを知らない。
for
ループを使用しています。
私たちはよりエレガントで高速に対応できますか?
ここでは、4つの異なるセルアレイの代わりに1つのセルアレイを使用する考えがあります。今私はpart{1} part{2} ... part{4}
を使用しています。したがって、事前に割り当てることができますpart = cell(4,1);
本当に、私はそれについて簡単に思っています:)簡単な解決策! 私が誤解していたのは、どこでもセル配列を使用していたからです(読みやすいように数値配列に置き換えています)。だから、この 't {1,1}(1:end)'などはちょうど私の目を捨てて、私はこれを見ることができません:)ありがとう! –
@Mikhail_Samお使いのコードの簡略化されたバージョンを提供していただきありがとうございます。はい、あなたが言及したように、数値配列ではセル配列よりも少し難読化されていますが、両方でうまく機能します。私はあなたの役に立つかもしれないより興味深いリンクで私の答えを更新しました。乾杯! – codeaviator