从时间序列中选择特定时间点

时间:2017-05-02 23:52:08

标签: matlab indexing

我有 164 x 246矩阵,名为 M 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个块的时间点,并将这些块连接起来。因此,输出应为 164 x 72 矩阵(即164个区域,8个区块×9个时间点/每个区块)。

这似乎是一个非常简单的索引问题,但我很难有效地做到这一点。我尝试将M中的每个块编入索引(对于intance,vertcat(M(onsets(1,1):onsets(1,1)+8,:));),然后使用vertcat,但这看起来非常笨拙。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

% 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行进行操作,同时根据您的描述,您需要对列进行操作。希望这会有所帮助。