【发布时间】:2017-02-02 13:48:54
【问题描述】:
我有一大堆数据(可能有成千上万个值)。此数据是收集在一个数组中的实验结果:
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);
【问题讨论】:
标签: arrays matlab for-loop vectorization