首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用固定步长提取数组元素(matlab)

如何用固定步长提取数组元素(matlab)
EN

Stack Overflow用户
提问于 2016-09-07 04:43:41
回答 2查看 83关注 0票数 0

我是用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)

以此类推。我怎么才能做到呢?我应该使用循环吗?有没有我不知道的索引函数可以帮到我?

提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-07 09:58:37

您可以调整数据的形状,使每列表示一天。这将得到一个48x17x31的矩阵:

代码语言:javascript
复制
dailymatrix = reshape(bigmatrix, 48, 17, 31);

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

代码语言:javascript
复制
night_data = dailymatrix([1:8, 46:48], 1, 27);
                                   %   ^-- 1st day
day_data = dailymatrix([22:32], 1, 27);

第二天的数据是:

代码语言:javascript
复制
night_data = dailymatrix([1:8, 46:48], 2, 27);
                                   %   ^-- 2nd day
day_data = dailymatrix([22:32], 2, 27);

为了得到所有17天的数据,

代码语言:javascript
复制
night_data = dailymatrix([1:8, 46:48], :, 27);
day_data = dailymatrix([22:32], :, 27);

由于数据每天都在相同的时隙中,因此您永远不需要更改第一个下标。

票数 0
EN

Stack Overflow用户

发布于 2016-09-07 04:53:03

您可以在矩阵的索引中使用变量,并将其包装在一个具有一些动态索引的循环中。

代码语言:javascript
复制
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对象后,

代码语言:javascript
复制
bigmatrix.Date=datetime(bigmatrix.Date)

您基本上可以做如下所示的事情。

代码语言:javascript
复制
night_data_1=bigmatrix(hour(bigmattrix.Date)>22&hour(bigmattrix.Date)<8 ,27)

它将能够索引晚上10点到上午8点之间的所有数据点(或者无论您的日夜周期是什么)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39357541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档