如何使用固定步骤提取数组元素(matlab)

时间:2016-09-06 20:43:41

标签: arrays matlab indexing

我在使用Matlab进行编码时非常陌生,我正在努力解决我无法修复的问题。 基本上我有数据"半小时服用" (每天48次)并提到17天(17x48 = 816个元素)。 我将所有数据都放在一个大矩阵(816 x 31)中,我需要区分一些日间数据"来自"夜间数据"。 我需要处理的列数组(816个元素)的元素如下(第一天):

night_data = bigmatrix([1:8,46:48],27);

day_data = bigmatrix([22:32],27)

但我必须做同样的事情"选择"对于每一天,即第二天将是

night_data_2 = bigmatrix([49:56,93:96],27)

day_data_2 = bigmatrix([70:81],27)

依旧...... 我该怎么做?我应该使用循环吗?是否有任何索引功能我不知道可以帮助我?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

您可以在您的矩阵的指标中使用变量,并将其包含在一个带有动态索引的循环中。

night_data.(strcat('night',int2str(n)))=bigmatrix([1+n*48:8+n*48, 46+n*48:48+n*48],27)

这将创建一个结构,创建一个名为night 1,night 2等的字段,一直到你需要的夜晚。这也可以在一天内重复。

但是,您应该在matlab中使用带有表变量的日期索引。将日期列转换为日期时间对象后,

bigmatrix.Date=datetime(bigmatrix.Date)

您基本上可以执行以下操作。

night_data_1=bigmatrix(hour(bigmattrix.Date)>22&hour(bigmattrix.Date)<8 ,27)

它可以在晚上10点到早上8点之间(或者你的昼夜周期截止时间)索引所有数据点。

答案 1 :(得分:0)

您可以重新整形数据,以便每列代表一天。这将给你一个48 x 17 x 31矩阵:

dailymatrix = reshape(bigmatrix, 48, 17, 31);

现在,要访问数据,您需要一个新的下标。您的第一个夜间/日数据将更改为

night_data = dailymatrix([1:8, 46:48], 1, 27);
                                   %   ^-- 1st day
day_data = dailymatrix([22:32], 1, 27);

第二天的数据将是:

night_data = dailymatrix([1:8, 46:48], 2, 27);
                                   %   ^-- 2nd day
day_data = dailymatrix([22:32], 2, 27);

获得所有17天&#39;值得的数据,

night_data = dailymatrix([1:8, 46:48], :, 27);
day_data = dailymatrix([22:32], :, 27);

由于数据每天都处于相同的时间段,因此您无需更改第一个下标。