Slice¶
バージョン名: Slice-8
カテゴリー: データ移動
簡単な説明: Slice 操作は、入力テンソルのスライスを抽出します。
詳細な説明: Slice 操作は、data
テンソルから値の領域を選択します。選択された値は、start
入力で指定されたインデックスで開始され (包括的)、stop
入力で指定されたインデックスで終了します (排他的)。
step
入力では、n 番目ごとの要素を選択して data
のサブサンプリングが可能です。ここで、n
は対応する軸の step
要素に等しくなります。負の step
値は逆方向にスライスすることを示し、対応する軸に沿ったシーケンスが出力テンソルで反転されます。すべての値を連続して選択するには、各軸の step
を 1
に設定します。
オプションの axes
入力を使用すると、選択した軸のみでスライス・インデックスを指定できます。他の軸は影響を受けず、そのまま出力されます。
ルールは Python 言語のスライス data[start:stop:step]
に従います。
属性: Slice 操作には属性がありません。
入力:
1:
data
- タイプ T および形状ランク 1 以上のテンソル (スライスされる)。必須。-
2:
start
- T_IND タイプの 1D テンソル。data
の軸に対応するインデックス。data
テンソル内のスライスの開始座標を定義します。負のインデックス値は、その次元の終わりから要素をカウントすることを表します。次元のサイズより大きい値は、サイレントにクランプされます。必須。 -
3:
stop
- 1D、start
と同様に T_IND タイプ。スライスの反対側の頂点の座標、またはスライスの終了位置を定義します。ストップ・インデックスは排他的です。つまり、終了エッジにある値は出力スライスに含まれません。サイズが不明な次元の最後までスライスするには、
INT_MAX
(逆方向にスライスする場合はINT_MIN
) を使用できます。必須。 -
4:
step
- T_IND タイプの 1D テンソルで、start
とstop
と同じ形状です。スライスに使用される各インデックス間の増分を指定する整数値。値を
0
にすることはできません。負の値は後方にスライスすることを示します。必須。 -
5:
axes
- T_AXIS タイプの 1D テンソル。start
とstop
の値がどの次元に適用されるかを示すオプションの 1D テンソル。負の値は、次元を端から数えることを意味します。範囲は[-r, r - 1]
です。ここで、r
はdata
入力テンソルのランクです。値は一意である必要があります。特定の軸が指定されていない場合、スライスされずに出力されます。デフォルト値:[0, 1, 2, ..., start.shape[0] - 1]
。オプション。
start
、stop
、step
、および axes
入力の要素数は等しい必要があります。
出力:
1: 選択したスライスの値を持つ T タイプのテンソル。出力テンソルの形状は、
data
入力の形状と同じランクを持ち、start
、stop
、およびstep
入力で指定された値に従って次元が削減されます。
タイプ:
T: サポートされている任意のタイプ。
T_IND: サポートされている整数タイプ。
T_AXIS: サポートされている整数タイプ。
例:
例 1: 基本的なスライス
<layer id="1" type="Slice" ...>
<input>
<port id="0"> <!-- data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -->
<dim>10</dim>
</port>
<port id="1"> <!-- start: [1] -->
<dim>1</dim>
</port>
<port id="2"> <!-- stop: [8] -->
<dim>1</dim>
</port>
<port id="3"> <!-- step: [1] -->
<dim>1</dim>
</port>
<port id="4"> <!-- axes: [0] -->
<dim>1</dim>
</port>
</input>
<output>
<port id="5"> <!-- output: [1, 2, 3, 4, 5, 6, 7] -->
<dim>7</dim>
</port>
</output>
</layer>
例 2: 基本的なスライス、デフォルトは axes
<layer id="1" type="Slice" ...>
<input>
<port id="0"> <!-- data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -->
<dim>10</dim>
</port>
<port id="1"> <!-- start: [1] -->
<dim>1</dim>
</port>
<port id="2"> <!-- stop: [8] -->
<dim>1</dim>
</port>
<port id="3"> <!-- step: [1] -->
<dim>1</dim>
</port>
</input>
<output>
<port id="4"> <!-- output: [1, 2, 3, 4, 5, 6, 7] -->
<dim>7</dim>
</port>
</output>
</layer>
例 3: 基本的なスライス、step: [2]
<layer id="1" type="Slice" ...>
<input>
<port id="0"> <!-- data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -->
<dim>10</dim>
</port>
<port id="1"> <!-- start: [1] -->
<dim>1</dim>
</port>
<port id="2"> <!-- stop: [8] -->
<dim>1</dim>
</port>
<port id="3"> <!-- step: [2] -->
<dim>1</dim>
</port>
<port id="4"> <!-- axes: [0] -->
<dim>1</dim>
</port>
</input>
<output>
<port id="5"> <!-- output: [1, 3, 5, 7] -->
<dim>4</dim>
</port>
</output>
</layer>
例 4: 次元サイズ外の start
と stop
、step: [1]
<layer id="1" type="Slice" ...>
<input>
<port id="0"> <!-- data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -->
<dim>10</dim>
</port>
<port id="1"> <!-- start: [-100] -->
<dim>1</dim>
</port>
<port id="2"> <!-- stop: [100] -->
<dim>1</dim>
</port>
<port id="3"> <!-- step: [1] -->
<dim>1</dim>
</port>
<port id="4"> <!-- axes: [0] -->
<dim>1</dim>
</port>
</input>
<output>
<port id="5"> <!-- output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -->
<dim>10</dim>
</port>
</output>
</layer>
例 5: すべての要素を後方にスライス、step: [-1]
、stop: [-11]
<layer id="1" type="Slice" ...>
<input>
<port id="0"> <!-- data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -->
<dim>10</dim>
</port>
<port id="1"> <!-- start: [9] -->
<dim>1</dim>
</port>
<port id="2"> <!-- stop: [-11] -->
<dim>1</dim>
</port>
<port id="3"> <!-- step: [-1] -->
<dim>1</dim>
</port>
<port id="4"> <!-- axes: [0] -->
<dim>1</dim>
</port>
</input>
<output>
<port id="5"> <!-- output: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] -->
<dim>10</dim>
</port>
</output>
</layer>
例 6: 後方にスライス、step: [-1]
、stop: [0]
<layer id="1" type="Slice" ...>
<input>
<port id="0"> <!-- data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -->
<dim>10</dim>
</port>
<port id="1"> <!-- start: [9] -->
<dim>1</dim>
</port>
<port id="2"> <!-- stop: [0] -->
<dim>1</dim>
</port>
<port id="3"> <!-- step: [-1] -->
<dim>1</dim>
</port>
<port id="4"> <!-- axes: [0] -->
<dim>1</dim>
</port>
</input>
<output>
<port id="5"> <!-- output: [9, 8, 7, 6, 5, 4, 3, 2, 1] -->
<dim>9</dim>
</port>
</output>
</layer>
例 7: 後方にスライス、step: [-1]
、stop: [-10]
<layer id="1" type="Slice" ...>
<input>
<port id="0"> <!-- data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -->
<dim>10</dim>
</port>
<port id="1"> <!-- start: [9] -->
<dim>1</dim>
</port>
<port id="2"> <!-- stop: [-10] -->
<dim>1</dim>
</port>
<port id="3"> <!-- step: [-1] -->
<dim>1</dim>
</port>
<port id="4"> <!-- axes: [0] -->
<dim>1</dim>
</port>
</input>
<output>
<port id="5"> <!-- output: [9, 8, 7, 6, 5, 4, 3, 2, 1] -->
<dim>9</dim>
</port>
</output>
</layer>
例 8: 後方にスライス、step: [-2]
<layer id="1" type="Slice" ...>
<input>
<port id="0"> <!-- data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -->
<dim>10</dim>
</port>
<port id="1"> <!-- start: [9] -->
<dim>1</dim>
</port>
<port id="2"> <!-- stop: [-11] -->
<dim>1</dim>
</port>
<port id="3"> <!-- step: [-2] -->
<dim>1</dim>
</port>
<port id="4"> <!-- axes: [0] -->
<dim>1</dim>
</port>
</input>
<output>
<port id="5"> <!-- output: [9, 7, 5, 3, 1] -->
<dim>5</dim>
</port>
</output>
</layer>
例 9: 次元サイズの範囲外で start
および stop
し、後方にスライス
<layer id="1" type="Slice" ...>
<input>
<port id="0"> <!-- data: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] -->
<dim>10</dim>
</port>
<port id="1"> <!-- start: [100] -->
<dim>1</dim>
</port>
<port id="2"> <!-- stop: [-100] -->
<dim>1</dim>
</port>
<port id="3"> <!-- step: [-1] -->
<dim>1</dim>
</port>
<port id="4"> <!-- axes: [0] -->
<dim>1</dim>
</port>
</input>
<output>
<port id="5"> <!-- output: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] -->
<dim>10</dim>
</port>
</output>
</layer>
例 10: 2D テンソルをスライス、すべての軸を指定
<layer id="1" type="Slice" ...>
<input>
<port id="0"> <!-- data: data: [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]] -->
<dim>2</dim>
<dim>5</dim>
</port>
<port id="1"> <!-- start: [0, 1] -->
<dim>2</dim>
</port>
<port id="2"> <!-- stop: [2, 4] -->
<dim>2</dim>
</port>
<port id="3"> <!-- step: [1, 2] -->
<dim>2</dim>
</port>
<port id="4"> <!-- axes: [0, 1] -->
<dim>2</dim>
</port>
</input>
<output>
<port id="5"> <!-- output: [1, 3, 6, 8] -->
<dim>2</dim>
<dim>2</dim>
</port>
</output>
</layer>
例 11: 3D テンソルをスライス、すべての軸を指定
<layer id="1" type="Slice" ...>
<input>
<port id="0"> <!-- data -->
<dim>20</dim>
<dim>10</dim>
<dim>5</dim>
</port>
<port id="1"> <!-- start: [0, 0, 0] -->
<dim>2</dim>
</port>
<port id="2"> <!-- stop: [4, 10, 5] -->
<dim>2</dim>
</port>
<port id="3"> <!-- step: [1, 1, 1] -->
<dim>2</dim>
</port>
<port id="4"> <!-- axes: [0, 1, 2] -->
<dim>2</dim>
</port>
</input>
<output>
<port id="5"> <!-- output -->
<dim>4</dim>
<dim>10</dim>
<dim>5</dim>
</port>
</output>
</layer>
例 12: 3D テンソルをスライス、最後の軸のデフォルト
<layer id="1" type="Slice" ...>
<input>
<port id="0"> <!-- data -->
<dim>20</dim>
<dim>10</dim>
<dim>5</dim>
</port>
<port id="1"> <!-- start: [0, 0] -->
<dim>2</dim>
</port>
<port id="2"> <!-- stop: [4, 10] -->
<dim>2</dim>
</port>
<port id="3"> <!-- step: [1, 1] -->
<dim>2</dim>
</port>
<port id="4"> <!-- axes: [0, 1] -->
<dim>2</dim>
</port>
</input>
<output>
<port id="5"> <!-- output -->
<dim>4</dim>
<dim>10</dim>
<dim>5</dim>
</port>
</output>
</layer>