2016-04-29 27 views
1

インデックスとして使用する線形ベクトルを作成しようとしています。私はインデックスx = 700,1000,1100,2100,2300,2400,2900のこれらの開始番号の間に1:99の数字を記入する必要があります。私は様々な種類のループを使用しようとしましたが、私は各100の番号を保存することができませんループ内の配列内の配列。私はループを使わない方法を学び、これをもっと簡単にしたいと思っています。不規則な間隔のリニアインデックス

したがって、xfinalは、 - 700,701,702 ... 799,1000,1001,1002 ... 1099,1100,1101,1102、... 1199,2100,2101、2102、...のようになります。 2399,2400,2401,2402、... 2499,2900,2901,2902、... 2999を含む。 私はキーボードで頭を叩いています - ありがとう!

答えて

2

のはbsxfunキーボード怖いループを保存してみましょう -

x = [700, 1000, 1100, 2100, 2300, 2400, 2900]; 
offset_arr = 0:99; 
xfinal = reshape(bsxfun(@plus,x,offset_arr.'),1,[]) 
+0

私は何かが 'bsxfun'よりも恐ろしいとは思わない... – excaza

+0

@excaza私は時間がかかると言います! ;) – Divakar

+0

素晴らしい。閉じた括弧の前の "1"と閉じた括弧の意味を説明するのがとても親切ですか? – user2100039

2

怖いループせずにキーボードのバージョンに少し怖い、おそらくあまり効率的で、より少ないコンパクト:

x = [700, 1000, 1100, 2100, 2300, 2400, 2900]; 
intermediate = 0:99; 

tmp = repmat(intermediate, length(x), 1) + repmat(x.', 1, length(intermediate)); 
x_new = reshape(tmp.', 1, []); 
+0

D: – Divakar

+0

@Divakar私は[キーボード保存版]を作成しました(https://gist.github.com/sco1/e7e362946b7d7013ee095434ae308255) – excaza

+0

これは特に救済です「中間」が「イム」になる! ;) – Divakar

関連する問題