我有 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
,但这看起来非常笨拙。有人可以帮忙吗?
答案 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
行进行操作,同时根据您的描述,您需要对列进行操作。希望这会有所帮助。