У меня есть большой массив данных (он может иметь тысячи и десятки тысяч значений). Эти данные являются результаты экспериментов, собранных в одном массиве:Разделите массив данных более эффективным способом 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 = [];
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);
это отлично работает, но это медленно из-за:
- Я не могу заранее выделить
part1 part2 part3 part4
- Я не знаю их размеров; - Он использует
for
петлю.
Можем ли мы сделать это более элегантным и быстрым способом?
Теперь у меня есть идея использовать одну ячейку памяти вместо 4 разных. Теперь я использую part{1} part{2} ... part{4}
. Поэтому я могу выделить его как part = cell(4,1);
Ahhh На самом деле, я просто переусердствовал об этом :) Простое решение! Все мое недоразумение было из-за того, что я везде использовал массивы ячеек (заменил их на числовые массивы, о которых идет речь только для удобства чтения). Итак, это 't {1,1} (1: end)' и т. Д. Просто засоряет мои глаза, и я не вижу этого :) Спасибо! –
@Mikhail_Sam Спасибо, что нашли время, чтобы предоставить упрощенную версию вашего кода. Да, как вы говорите, он немного менее запутан с числовыми массивами, чем с массивами ячеек, но он хорошо работает на обоих. Я обновил свой ответ более интересными ссылками, которые могут оказаться полезными. Ура! – codeaviator