2017-05-02 6 views
0

164 x 246マトリックスMといいます。 Mは、164の脳領域の246の時点を含む時系列データである。私は全部ではなく、時系列の特定のブロックだけで作業したいと思っています。そうするために、私は各ブロックの時間の開始を含むonsetsというベクトルを作成しました。時系列の特定の時点を選ぶ

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

この例では、合計8個のブロックがあります(この数は変更できます)。各ブロックには9個の時点が含まれています。たとえば、最初のブロックには、時点7,8,9、...、15が含まれます。 2番目のブロックには時点37,38,39、...、45が含まれています。Mから8つのブロックの時点を抽出し、8つのブロックを連結したいと考えています。したがって、出力は164 x 72のマトリックス(すなわち、164個の領域、8ブロック×9時間点/ブロック)でなければならない。

これは非常に単純なインデックス作成の問題のようですが、私はこれを効率的に行うのに苦労しています。私はMの各ブロックのインデックスを作成しようとしましたが(vertcat(M(onsets(1,1):onsets(1,1)+8,:));)、vertcatを使用してください。これは非常に不器用です。誰も助けることができますか?

+0

1つの行列 'M(onsets(1,1):onsets(1,1)+8、:)'に 'vertcat'を使いたいのですが? – Anthony

答えて

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の行を操作してみてください。お役に立てれば。

+0

ありがとう!これはうまくいく。私は次元 'idx = false(size(M、1)、1);と' MM = M(idx、:); 'を変更しなければなりませんでした。乾杯! –