【问题标题】:How to extract elements of an array with a fixed step (matlab)如何以固定步骤提取数组的元素(matlab)
【发布时间】:2016-09-06 20:43:40
【问题描述】:

我对使用 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)

等等…… 我怎样才能做到?我应该使用循环吗?有什么我不知道的索引功能可以帮助我吗?

提前谢谢你。

【问题讨论】:

    标签: arrays matlab indexing


    【解决方案1】:

    您可以重塑数据,使每一列代表一天。这会给你一个 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 天的数据,

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

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

    【讨论】:

    • 非常感谢! ;)
    【解决方案2】:

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

    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 中对表变量使用日期索引。将日期列转换为日期时间对象后,

    bigmatrix.Date=datetime(bigmatrix.Date)
    

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

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

    它将能够为晚上 10 点到早上 8 点(或您的昼夜周期截止时间)之间的所有数据点编制索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      相关资源
      最近更新 更多