我在使用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)
依旧...... 我该怎么做?我应该使用循环吗?是否有任何索引功能我不知道可以帮助我?
提前谢谢。
答案 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);
由于数据每天都处于相同的时间段,因此您无需更改第一个下标。