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感谢您花时间提供代码的简化版本。是的,正如您所提到的,与单元格数组相比,数字数组的模糊性要小一些,但它在这两种情况下都很好地工作。我用更多有趣的链接更新了我的答案,你可能会发现这些链接很有用。干杯