我是用Matlab编程的新手,我正在为一个我无法修复的问题而苦苦挣扎。基本上,我的数据是“每半小时获取一次”(每天48次),并引用了17天(17x48=816元素)。我得到了一个大矩阵(816x31)中的所有数据,我需要区分一些“白天数据”和“夜间数据”。我需要处理的列数组的元素(816个元素)如下(第一天):
night_data=大矩阵(1:8,46:48,27);
day_data=大矩阵(22:32,27)
但我必须为每一天做出相同的“选择”,即第二天将是
night_data_2 =大矩阵(49:56,93:96,27)
day_data_2 =大矩阵(70:81,27)
以此类推。我怎么才能做到呢?我应该使用循环吗?有没有我不知道的索引函数可以帮到我?
提前谢谢你。
发布于 2016-09-07 09:58:37
您可以调整数据的形状,使每列表示一天。这将得到一个48x17x31的矩阵:
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天的数据,
night_data = dailymatrix([1:8, 46:48], :, 27);
day_data = dailymatrix([22:32], :, 27);由于数据每天都在相同的时隙中,因此您永远不需要更改第一个下标。
发布于 2016-09-07 04:53:03
您可以在矩阵的索引中使用变量,并将其包装在一个具有一些动态索引的循环中。
night_data.(strcat('night',int2str(n)))=bigmatrix([1+n*48:8+n*48, 46+n*48:48+n*48],27)这将创建一个结构,该结构创建名为night 1、night 2等的字段,直到您需要的night n。这也可以重复一天。
但是,您应该在matlab中将日期索引与表变量一起使用。将date列转换为datetime对象后,
bigmatrix.Date=datetime(bigmatrix.Date)您基本上可以做如下所示的事情。
night_data_1=bigmatrix(hour(bigmattrix.Date)>22&hour(bigmattrix.Date)<8 ,27)它将能够索引晚上10点到上午8点之间的所有数据点(或者无论您的日夜周期是什么)。
https://stackoverflow.com/questions/39357541
复制相似问题