Slice

バージョン名: Slice-8

カテゴリー: データ移動

簡単な説明: Slice 操作は、入力テンソルのスライスを抽出します。

詳細な説明: Slice 操作は、data テンソルから値の領域を選択します。選択された値は、start 入力で指定されたインデックスで開始され (包括的)、stop 入力で指定されたインデックスで終了します (排他的)。

step 入力では、n 番目ごとの要素を選択して data のサブサンプリングが可能です。ここで、n は対応する軸の step 要素に等しくなります。負の step 値は逆方向にスライスすることを示し、対応する軸に沿ったシーケンスが出力テンソルで反転されます。すべての値を連続して選択するには、各軸の step1 に設定します。

オプションの 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 テンソルで、startstop と同じ形状です。

    スライスに使用される各インデックス間の増分を指定する整数値。値を 0 にすることはできません。負の値は後方にスライスすることを示します。必須。

  • 5: axes - T_AXIS タイプの 1D テンソル。

    startstop の値がどの次元に適用されるかを示すオプションの 1D テンソル。負の値は、次元を端から数えることを意味します。範囲は [-r, r - 1] です。ここで、rdata 入力テンソルのランクです。値は一意である必要があります。特定の軸が指定されていない場合、スライスされずに出力されます。デフォルト値: [0, 1, 2, ..., start.shape[0] - 1]オプション。

startstopstep、および axes 入力の要素数は等しい必要があります。

出力:

  • 1: 選択したスライスの値を持つ T タイプのテンソル。出力テンソルの形状は、data 入力の形状と同じランクを持ち、startstop、および 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: 次元サイズ外の startstopstep: [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>