Arrays 用Matlab更有效地划分数据数组
我有一个大的数据数组(可以是数千个或数万个值)。该数据是在一个阵列中收集的实验结果:Arrays 用Matlab更有效地划分数据数组,arrays,matlab,for-loop,vectorization,Arrays,Matlab,For Loop,Vectorization,我有一个大的数据数组(可以是数千个或数万个值)。该数据是在一个阵列中收集的实验结果: 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值再次从
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
t您可以使用逻辑索引来改进代码
我强烈建议您阅读以下参考资料:
- Mathworks文档页面:
- Loren关于MATLAB艺术的博客:
下面的代码使用逻辑索引执行您想要的操作,无需任何循环,因此无需预先分配任何数组:
data1 = data(t <= 1);
data2 = data((t > 1) && (t <= 4));
data3 = data((t > 4) && (t <= 6));
data4 = data(t > 6);
data1=数据(t1)&(t4)&(t6);
逻辑索引就像红绿灯:它允许值为1
的数组元素继续,同时停止值为0
的元素
Matlab在这类任务中非常强大。您可以使用逻辑索引来改进代码
我强烈建议您阅读以下参考资料:
- Mathworks文档页面:
- Loren关于MATLAB艺术的博客:
下面的代码使用逻辑索引执行您想要的操作,无需任何循环,因此无需预先分配任何数组:
data1 = data(t <= 1);
data2 = data((t > 1) && (t <= 4));
data3 = data((t > 4) && (t <= 6));
data4 = data(t > 6);
data1=数据(t1)&(t4)&(t6);
逻辑索引就像红绿灯:它允许值为1
的数组元素继续,同时停止值为0
的元素
Matlab在这类任务中非常强大。Ahhh真的,我只是想得太多了:)简单的解决方案!我所有的误解都是因为我在任何地方都使用单元格数组(为了可读性,我将其替换为有问题的数字数组)。所以这个t{1,1}(1:end)
等等。我的眼睛里到处都是,我看不见这个:)谢谢@Mikhail_Sam感谢您花时间提供代码的简化版本。是的,正如您所提到的,与单元格数组相比,数字数组的模糊性要小一些,但它在这两种情况下都很好地工作。我用更多有趣的链接更新了我的答案,你可能会发现这些链接很有用。干杯啊,真的,我只是想得太多了:)简单的解决办法!我所有的误解都是因为我在任何地方都使用单元格数组(为了可读性,我将其替换为有问题的数字数组)。所以这个t{1,1}(1:end)
等等。我的眼睛里到处都是,我看不见这个:)谢谢@Mikhail_Sam感谢您花时间提供代码的简化版本。是的,正如您所提到的,与单元格数组相比,数字数组的模糊性要小一些,但它在这两种情况下都很好地工作。我用更多有趣的链接更新了我的答案,你可能会发现这些链接很有用。干杯