【问题标题】:Pick specific timepoints from a timeseries从时间序列中选择特定时间点
【发布时间】:2017-05-02 23:52:07
【问题描述】:

我有一个名为 M164 x 246 矩阵M 是时间序列的数据,包含 164 个大脑区域的 246 个时间点。我只想处理时间序列的特定部分,而不是全部。为此,我创建了一个名为 onsets 的向量,其中包含每个块的时间开始。

onsets = [7;37;82;112;145;175;190;220];

在此示例中,总共有 8 个块(尽管这个数字可能会有所不同),每个块包含 9 个时间点。因此,例如,第一个块将包含时间点 7、8、9、...、15;第二个块将包含时间点 37、38、39、...、45。我想从 M 中提取这 8 个块的时间点并连接 8 个这些块。因此,输出应该是一个 164 x 72 矩阵(即 164 个区域,8 个块 x 9 个时间点/每块)。

这似乎是一个非常简单的索引问题,但我正在努力有效地做到这一点。我尝试在 M 中索引每个块(例如,vertcat(M(onsets(1,1):onsets(1,1)+8,:));)然后使用vertcat,但这似乎很笨拙。有人可以帮忙吗?

【问题讨论】:

  • 为什么要在一个矩阵M(onsets(1,1):onsets(1,1)+8,:)上使用vertcat

标签: matlab indexing


【解决方案1】:

试试这个:

% create sample data
M       = rand(164,246);

% create index vector
idx     = false(1,size(M,2));
onsets  = [7;37;82;112;145;175;190;220];

for i=1:numel(onsets)
    idx(onsets(i):onsets(i)+8) = true;
end

% create output matrix
MM      = M(:,idx);

您似乎以某种方式切换了尺寸,即您尝试对M 的行进行操作,而根据您的描述,您需要对列进行操作。希望这会有所帮助。

【讨论】:

  • 谢谢!这很好用。我不得不更改尺寸idx = false(size(M,1),1);MM = M(idx,:); 但这很可能是因为我没有很好地解释我的问题。干杯!
猜你喜欢
  • 2021-07-16
  • 2022-11-02
  • 1970-01-01
  • 2021-08-13
  • 2016-08-24
  • 2016-01-30
  • 2021-06-21
  • 2015-03-03
  • 2019-08-24
相关资源
最近更新 更多