2016-09-10 27 views
1

セル配列内の特定の配列に素早く簡単にアクセスする方法を探しています。たとえば、のは、私はのは、私は第一、第二、および新しいセル配列内の第四の行列のみ(すなわち、A、BおよびD)をしたいとしましょう セル配列の配列にアクセスする簡単な方法

A = rand(10,2); 
B = rand(15,1); 
C = rand(130,1); 
D = rand(16,1); 
E = rand(1000,25); 
my_cell = {A,B,C,D,E}; 

を持っているとしましょう。したがって、新しいセル配列は{A、B、D}で構成されます。これは明らかにforループを使って簡単にできます:

idx=[1,2,4]; 
new_cell=cell(1,length(idx)); 
for i=1:length(idx) 
    new_cell{i}=my_cell{idx(i)}; 
end 

もっと早く簡単な方法があるのだろうかと思っていました。たぶん、私が気づいていない、不自然なインデックス作成の仕掛けや機能がありますか?私は助けに感謝します。

答えて

1

{my_cell{idx}}トリックを行う必要があります。

my_cell{idx} idxでインデックス付けされたmy_cellの要素をカンマ区切りリストとして返します。これはA, B, Dに相当します。あなたがする必要があるのは、{}でこのリストを閉じて、それからセル配列を作ることだけです。

+0

note。構造を保持したい場合、このアプローチは機能しません。元のセルを 'my_cell = {A; B; C; D; E}'に変更すると、私の意図がわかります。 –

+0

驚くばかり!構造について頭がおかしくなってくれてありがとう。私はあなたが何を意味するかを見ます。 –

3

はい、通常の配列(括弧のかわりにかっこを使用)のようにセル配列をインデックスできます。実際にはで、通常の配列です。これは通常の「セル」要素の配列です。したがって、通常の配列のようにインデックス付けすると、の内容であるではなく、個々の「セル要素」が返されます。ただ、「アレイのようなセルをインデックス化」と「新しいセルにカンマで区切られた出力を集めるとの違いを明確にする:

したがって、あなただけの

my_cell(idx) 


EDITを行うことができますアレイ "アプローチ:

>> my_cell = {'A','B','C'; 'D','E','F'; 'G', 'H', 'I'}  
my_cell = 
    'A' 'B' 'C' 
    'D' 'E' 'F' 
    'G' 'H' 'I' 

>> my_cell(1:2,1:2) 
ans = 
    'A' 'B' 
    'D' 'E' 

>> {my_cell{1:2,1:2}} % this will ALWAYS be a horizontal cell vector 
ans = 
    'A' 'D' 'B' 'E' 
+0

これより簡単なことはありません:) Thanks –

関連する問題