3

私は配列を持っています

a=1:20

データの引き出しを開始する場所を示す一連のインデックス:

i=[4,12]

index ごとiに、その index と次の 4 つの (まあ、x実際には) 列または行の要素が必要です。特殊なケースを無視できるように、配列の末尾に近づくことは避けます。

これをハードコーディングした場合、次を使用できます。

a([4:8;12:16])

これで私の結果が達成されます。

しかしi、多くの異なる値を持つ可能性があります。

インデックスのリストを範囲のマトリックスに変換する方法、またはこの問題を解決する他の方法について何か考えはありますか?

編集 私はMatlab 2007を使用しています。ソリューションが Matlab の内部構造とツールボックスのみに依存していることが望ましいでしょう。bsxfun2007a まで存在しません。

4

2 に答える 2

5

indexxix、の要素に加えて必要な要素の数を指定するとi、次を使用できます。

i = [4 6 8];
x = 4; 

bsxfun(@plus, 0:x, i(:)) 

インデックスのマトリックスを取得するには:

ans =

     4     5     6     7     8
     6     7     8     9    10
     8     9    10    11    12

アクセス権がない場合は、代わりにbsxfun次を使用できます。repmat

i = [4 6 8];
x = 4; 

repmat(i(:), 1, x+1) + repmat(0:x, length(i), 1)
于 2012-11-13T13:08:28.277 に答える
1

これは bsxfun なしのソリューションですが、前の回答に触発された repmat を使用しています。

i = [4 6 8];
x = 4;
p = repmat(1:x,length(i),1);
q = repmat(i',1,x);
p+q
于 2012-11-13T13:23:56.887 に答える