2016-04-07 5 views
1

1Dの配列y(1:20)とマトリックス形式のインデックスの集合を考えてみましょう:indx = [1,3; 7,12; 16,19]開始インデックスと終了インデックスの別のマトリックスに基づくインデックスマトリックス

セル配列を得るためのきれいな方法がありますか?{y(1:3)、y(7:12)、y(16:19)}?

これはループで簡単に行えますが、インデックスコレクションを1D配列に渡すためのシンプルで洗練された方法を知っています。

答えて

1

ループを使用する方法はありません。あなたはしかし速記としてarrayfunを使用することができます。

arrayfun(@(from,to) y(from:to), indx(:,1), indx(:,2), 'uni', 0) 

y = (1:20)*10; 
indx = [1,3;7,12;16,19]; 

celldisp(arrayfun(@(from,to) y(from:to), indx(:,1), indx(:,2), 'uni', 0)) 

ans{1} = 

    10 20 30 



ans{2} = 

    70 80 90 100 110 120 



ans{3} = 

    160 170 180 190 
+1

たぶん、もっと読みやすいであなたのデータ結果でこれを実行している: 'arrayfun(y)まで、から(から(@:INDX、へ) (:、1)、indx(:、2)、 'uni'、0) ' –

+0

@ダン、それはいいね。私は試してみます。どうもありがとう! –

+0

@オニールええ、それは良く見えます。私はそれを編集します。 – Dan