Home › Category Archives › 配列操作
Sponsored Link

(31) 配列要素を3グループに分割する

要素数10個の配列を作る。この配列 aを先頭から順に3グループに分割したい。

octave:1> a = rand(1,10)
a =
   0.772741   0.626770   0.137352   0.084265   0.202622   0.936371   0.214594   0.947130   0.592333   0.579594

3グループそれぞれの要素を抽出するためのインデックス用配列を作成する。
・グループ1: 3n+1
・グループ2: 3n+2
・グループ3: 3n
配列からの特定条件を満たす要素の抽出には find を使用する。

octave:2> idx = [1:10]
idx =
    1    2    3    4    5    6    7    8    9   10
octave:3> idx_1 = find(mod(idx,3)==1)
idx_1 =
    1    4    7   10
octave:4> idx_2 = find(mod(idx,3)==2)
idx_2 =
   2   5   8
octave:5> idx_3 = find(mod(idx,3)==0)
idx_3 =
   3   6   9

先に作成した配列 aを、グループ分割用インデックス配列 idx_nを使用して分割する。

octave:6> g1 = a(idx_1)
g1 =
   0.772741   0.084265   0.214594   0.579594
octave:7> g2 = a(idx_2)
g2 =
   0.62677   0.20262   0.94713
octave:8> g3 = a(idx_3)
g3 =
   0.13735   0.93637   0.59233

(30) 配列要素をランダムにシャッフル

要素数10個の配列を作る。この配列 aの中身をシャッフルしてみたい。

octave:1> a = rand(1,10)
a =
   0.589408   0.922543   0.080395   0.102798   0.335572   0.778895   0.139366   0.189401   0.700688   0.344026

randpermで1から10までの値をランダムに並べた配列を作る。

octave:2> b = randperm(10)
b =
    2    6    1    5    7    3    8    4    9   10

これをインデックスとして使用し、先に作成した配列 aの要素を並び替える。

octave:3> c = a(b)
c =
   0.922543   0.778895   0.589408   0.335572   0.139366   0.080395   0.189401   0.102798   0.700688   0.344026