切片

切片 - 13

版本

  • 名稱Slice (GitHub)

  • 網域main

  • since_version13

  • 函式False

  • 支援層級SupportType.COMMON

  • 形狀推論True

此版本的運算子自版本 13 起可用。

摘要

沿著多個軸產生輸入張量的切片。與 numpy 類似:https://numpy.dev.org.tw/doc/stable/user/basics.indexing.html?highlight=slice#slicing-and-striding

切片使用 startsendsaxessteps 輸入來選取其輸入 data 張量的子張量。

必須為每個 i 計算有效的 starts[i]ends[i]steps[i],其中 i[0, ... r-1] 中,其中 r = rank(input) 如下

如果省略 axes,則將其設為 [0, ..., r-1]。如果省略 steps,則將其設為長度為 len(starts)[1, ..., 1]

有效值初始化為 start[i] = 0ends[i] = dims[i],其中 dimsinput 的維度,且 steps[i] = 1

axes 的所有負數元素都會透過將 r 加到其中而變成非負數,其中 r =rank(input)

starts[i]ends[i] 中的所有負值都會將 dims[axes[i]] 加到其中,其中 dimsinput 的維度。然後,start[axes[i]] 是調整後的 starts[i],其被鉗制在 [0, dims[axes[i]]] 範圍內以進行正向步進,並鉗制在 [0, dims[axes[i]]-1] 範圍內以進行負向步進。

調整後的 ends[i] 的鉗制取決於 steps[i] 的正負號,且必須容納複製 0 到 dims[axes[i]] 個元素,因此對於正向步進,ends[axes[i]] 會鉗制在 [0, dims[axes[i]]],而對於負向步進,則會鉗制在 [-1, dims[axes[i]]-1]

最後,steps[axes[i]] = steps[i]

若要切片至大小未知的維度末端,建議在正向切片時傳入 INT_MAX,而在反向切片時傳入 'INT_MIN'。

範例 1

data = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
]
axes = [0, 1]
starts = [1, 0]
ends = [2, 3]
steps = [1, 2]
result = [
    [5, 7],
]

範例 2

data = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
]
starts = [0, 1]
ends = [-1, 1000]
result = [
    [2, 3, 4],
]

輸入

介於 3 到 5 個輸入之間。

  • data (異質) - T

    要從中提取切片的資料張量。

  • starts (異質) - Tind

    axes 中對應軸的起始索引的 1 維張量

  • ends (異質) - Tind

    axes 中對應軸的結束索引 (不包含) 的 1 維張量

  • axes (選用,異質) - Tind

    指定 startsends 應用於哪些軸的一維張量。負值表示從後往前計算維度。可接受的範圍為 [-r, r-1],其中 r = data 的秩。如果軸重複,則行為未定義。

  • steps (選用,異質) - Tind

    axes 中對應軸的切片步長的一維張量。負值表示向後切片。「steps」不能為 0。預設值為 1。

輸出

  • output (異質) - T

    切片的資料張量。

類型約束

  • T 屬於 ( tensor(bfloat16), tensor(bool), tensor(complex128), tensor(complex64), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    將輸入和輸出類型限制為所有張量類型。

  • Tind 屬於 ( tensor(int32), tensor(int64) )

    將索引限制為整數類型。

Slice - 11

版本

  • 名稱Slice (GitHub)

  • 網域main

  • since_version: 11

  • 函式False

  • 支援層級SupportType.COMMON

  • 形狀推論True

此運算符版本自第 11 版起可用。

摘要

沿多個軸產生輸入張量的切片。與 numpy 類似:https://numpy.dev.org.tw/doc/stable/reference/routines.indexing.html 切片使用 startsendsaxessteps 輸入來指定軸列表中每個軸的起始和結束維度以及步長,它使用此資訊來切片輸入的 data 張量。如果為任何起始或結束索引傳遞負值,則它表示該維度末尾之前的元素數量。如果傳遞給起始或結束的值大於 n(此維度中的元素數量),則它表示 n。對於切片到未知大小的維度末尾,建議在向前切片時傳遞 INT_MAX,而在向後切片時傳遞 'INT_MIN'。如果為步長傳遞負值,則表示向後切片。但是,步長值不能為 0。如果省略 axes,則它們會設定為 [0, ..., ndim-1]。如果省略 steps,則它們會設定為長度為 len(starts)[1, ..., 1]。範例 1:data = [ [1, 2, 3, 4], [5, 6, 7, 8], ] axes = [0, 1] starts = [1, 0] ends = [2, 3] steps = [1, 2] result = [ [5, 7], ] 範例 2:data = [ [1, 2, 3, 4], [5, 6, 7, 8], ] starts = [0, 1] ends = [-1, 1000] result = [ [2, 3, 4], ]

輸入

介於 3 到 5 個輸入之間。

  • data (異質) - T

    要從中提取切片的資料張量。

  • starts (異質) - Tind

    axes 中對應軸的起始索引的 1 維張量

  • ends (異質) - Tind

    axes 中對應軸的結束索引 (不包含) 的 1 維張量

  • axes (選用,異質) - Tind

    指定 startsends 應用於哪些軸的一維張量。負值表示從後往前計算維度。可接受的範圍為 [-r, r-1],其中 r = data 的秩。

  • steps (選用,異質) - Tind

    axes 中對應軸的切片步長的一維張量。負值表示向後切片。「steps」不能為 0。預設值為 1。

輸出

  • output (異質) - T

    切片的資料張量。

類型約束

  • T 屬於 ( tensor(bool), tensor(complex128), tensor(complex64), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    將輸入和輸出類型限制為所有張量類型。

  • Tind 屬於 ( tensor(int32), tensor(int64) )

    將索引限制為整數類型。

Slice - 10

版本

  • 名稱Slice (GitHub)

  • 網域main

  • since_version: 10

  • 函式False

  • 支援層級SupportType.COMMON

  • 形狀推論True

此運算符版本自第 10 版起可用。

摘要

沿多個軸產生輸入張量的切片。與 numpy 類似:https://numpy.dev.org.tw/doc/stable/reference/routines.indexing.html 切片使用 startsendsaxessteps 輸入來指定軸列表中每個軸的起始和結束維度以及步長,它使用此資訊來切片輸入的 data 張量。如果為任何起始或結束索引傳遞負值,則它表示該維度末尾之前的元素數量。如果傳遞給起始或結束的值大於 n(此維度中的元素數量),則它表示 n。對於切片到未知大小的維度末尾,建議傳遞 INT_MAX。如果為步長傳遞負值,則表示向後切片。如果省略 axes,則它們會設定為 [0, ..., ndim-1]。如果省略 steps,則它們會設定為長度為 len(starts)[1, ..., 1]。範例 1:data = [ [1, 2, 3, 4], [5, 6, 7, 8], ] axes = [0, 1] starts = [1, 0] ends = [2, 3] steps = [1, 2] result = [ [5, 7], ] 範例 2:data = [ [1, 2, 3, 4], [5, 6, 7, 8], ] starts = [0, 1] ends = [-1, 1000] result = [ [2, 3, 4], ]

輸入

介於 3 到 5 個輸入之間。

  • data (異質) - T

    要從中提取切片的資料張量。

  • starts (異質) - Tind

    axes 中對應軸的起始索引的 1 維張量

  • ends (異質) - Tind

    axes 中對應軸的結束索引 (不包含) 的 1 維張量

  • axes (選用,異質) - Tind

    指定 startsends 應用於哪些軸的一維張量。

  • steps (選用,異質) - Tind

    axes 中對應軸的切片步長的一維張量。預設值為 1。

輸出

  • output (異質) - T

    切片的資料張量。

類型約束

  • T 屬於 ( tensor(bool), tensor(complex128), tensor(complex64), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    將輸入和輸出類型限制為所有張量類型。

  • Tind 屬於 ( tensor(int32), tensor(int64) )

    將索引限制為整數類型。

Slice - 1

版本

  • 名稱Slice (GitHub)

  • 網域main

  • since_version: 1

  • 函式False

  • 支援層級SupportType.COMMON

  • 形狀推論True

此運算符版本自第 1 版起可用。

摘要

沿多個軸產生輸入張量的切片。與 numpy 類似:https://numpy.dev.org.tw/doc/stable/reference/routines.indexing.html 切片使用 axesstartsends 屬性來指定軸列表中每個軸的起始和結束維度,它使用此資訊來切片輸入的 data 張量。如果為任何起始或結束索引傳遞負值,則它表示該維度末尾之前的元素數量。如果傳遞給起始或結束的值大於 n(此維度中的元素數量),則它表示 n。對於切片到未知大小的維度末尾,建議傳遞 INT_MAX。如果省略 axes,則它們會設定為 [0, ..., ndim-1]。範例 1:data = [ [1, 2, 3, 4], [5, 6, 7, 8], ] axes = [0, 1] starts = [1, 0] ends = [2, 3] result = [ [5, 6, 7], ] 範例 2:data = [ [1, 2, 3, 4], [5, 6, 7, 8], ] starts = [0, 1] ends = [-1, 1000] result = [ [2, 3, 4], ]

屬性

  • axes - INTS :

    適用於 startsends 的軸。這是選填的。如果沒有提供,將被視為 [0, 1, …, len(starts) - 1]。

  • ends - INTS (必要)

    在 `axes` 中對應軸的結束索引(不包含)。

  • starts - INTS (必要)

    axes 中對應軸的起始索引。

輸入

  • data (異質) - T

    要從中提取切片的資料張量。

輸出

  • output (異質) - T

    切片的資料張量。

類型限制

  • T 屬於 ( tensor(bool), tensor(complex128), tensor(complex64), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8) )

    將輸入和輸出類型限制為所有張量類型。