helintrlv
ヘリカル配列を使用したシンボルの並べ替え
構文
intrlved = helintrlv(data,col,ngrp,stp)
[intrlved,state] = helintrlv(data,col,ngrp,stp)
[intrlved,state] = helintrlv(data,col,ngrp,stp,init_state)
説明
intrlved = helintrlv(data,col,ngrp,stp)
は、無制限数の行配列にらせん状に配置し配列の行を出力 intrlved
に配置することで data
のシンボルを並べ替えます。data
には、col*ngrp
要素がなければなりません。data
が複数の行と列をもつ行列の場合、col*ngrp
行をもたなければならず、また、この関数は列を独立して処理します。
この関数は内部計算に配列を使用します。配列には、1、2、3、... と順番にインデックス付けされる無限数の行と col
列があります。この関数は、入力からの col*ngrp
シンボルを ngrp
シンボルの連続する集合に分割します。この関数は、配列の k 番目の集合を行 1+(k-1)*stp
から k 列に沿って配置します。入力シンボルをもたない配列の位置の既定値は 0 です。この関数は、最初の ngrp
行を順番に読み込むことで、出力 intrlved
の配列から col*ngrp
シンボルを配置します。出力シンボルの一部は入力シンボルではなく既定値 0 です。同様に、入力シンボルの一部は配列に残り、出力に表示されません。
[intrlved,state] = helintrlv(data,col,ngrp,stp)
は、配列の最終状態を保持する構造体を出力します。state.value
には、配列の col
列に残り、出力に表示されない入力シンボルが格納されます。
[intrlved,state] = helintrlv(data,col,ngrp,stp,init_state)
は、init_state.value
に含まれているシンボルを使用して配列を初期化します。構造体 init_state
は通常、この同じ関数への前の呼び出しからの state
出力で、対応するデインターリーバーには無関係です。この構文では、出力シンボルの一部は既定値 0、一部は data
からの入力シンボル、一部は init_state.value
からの初期値です。
例
下記の例は 1 から 24 までの整数を並べ替えます。
% Interleave some symbols. Record final state of array. [i1,state] = helintrlv([1:12]',3,4,1); % Interleave more symbols, remembering the symbols that % were left in the array from the earlier command. i2 = helintrlv([13:24]',3,4,1,state); disp('Interleaved data:') disp([i1,i2]') disp('Values left in array after first interleaving operation:') state.value{:}
helintrlv
への連続呼び出し中に、次の 3 列配列を内部的に作成します。
[1 0 0; 2 5 0; 3 6 9; 4 7 10; 0 8 11; 0 0 12]
と
[13 8 11; 14 17 12; 15 18 21; 16 19 22; 0 20 23; 0 0 24]
上記の 2 番目の配列では、8、11、12 はこの関数への以前の呼び出しから配列に残った値です。この関数の 2 番目の呼び出しで init_state
入力を指定すると、既定値 0 ではなくこれらの値を使用します。
例の出力は、以下のとおりです (表示のために行列が転置されています)。インターリーブされたデータは上記の 3 列の配列の上位 4 行です。インターリーブされたデータの最初の半分のシンボルの一部は既定値 0、インターリーブされたデータの後半の半分は helintrlv
への最初の呼び出しから配列のまま残され、入力シンボルの一部 (20、23、および 24) はインターリーブされたデータにまったく表示されないことに注意してください。
Interleaved data: Columns 1 through 10 1 0 0 2 5 0 3 6 9 4 13 8 11 14 17 12 15 18 21 16 Columns 11 through 12 7 10 19 22 Values left in array after first interleaving operation: ans = [] ans = 8 ans = 11 12
heldeintrlv
のリファレンス ページの例もこの関数を使用します。
バージョン履歴
R2006a より前に導入