下载
中文
注册

SliceOperation

功能

从输入张量某个起始位置中提取指定大小的切片。

算子上下文

图1 SliceOperation算子上下文

定义

struct SliceParam {
    SVector<int64_t> offsets;
    SVector<int64_t> size;
};

参数列表

成员名称

类型

默认值

描述

offsets

SVector<int64_t>

-

每个维度切片的起始位置。

  • 当offsets[i]小于0时(-dimNum<=i<dimNum),例如offsets[i]= -1,输入x的第i维的维度大小为dimNum,则输入x的第i维切片的起始位置为dimNum - 1(即起始位置为最后一维)。
  • 当offsets[i]小于0时,且第i维的维度大小为dimNum,要求dimNum与x之和大于等于0。

size

SVector<int64_t>

-

每个维度切片的大小。

  • 当size[i] = -1时,表示切片的结束位置是第i维的最后一个位置。如果第i维的维度大小为dimNum,则结束位置为dimNum - 1。
  • size中元素要求大于等于-1。且offsets[i] + size[i]须在x的第i维维度的大小范围内。

输入

参数

维度

数据类型

格式

描述

x

[dim_0,dim_1,...,dim_n]

float16/float/int8/bool/int32/uint32/bf16

ND

输入tensor。

输出

参数

维度

数据类型

格式

描述

output

[dim_0,dim_1,...,dim_n]

float16/float/int8/bool/int32/uint32/bf16

与x的数据类型相同

ND

输出tensor,维度的大小为size指定的大小。

规格约束

  • 当offsets[i]小于0,第i维的维度大小为dimNum时,其含义是从dimNum+offsets[i]位置开始提取,例如offsets[i]= -1,输入x tensor的第i维大小为dimNum,则第i维切片的起始位置为dimNum - 1。
  • 当offsets[i]小于0时,且第i维的维度大小为dimNum,要求dimNum与offsets[i]之和大于等于0。
  • 当size[i] = -1时,表示切片的结束位置是第i维的最后一个位置。如果第i维的维度大小为dimNum,则结束位置为dimNum - 1。
  • size中元素要求大于等于-1。且offsets[i] + size[i]须在x的第i维维度的大小范围内。

调用接口示例

  • 输入
    x = [[ -78.9,   78.8,  32.22,   49.7,  82.8, 24.77],
         [  72.2,  20.89,  55.16,   85.5,  72.8,  94.8],
        [ 11.36, -83.56,  65.94, -46.94, 72.44,  68.7]]
    offsets = [1, 2]
        
    size = [2, 4]

    在第0维上,从下标为1开始切片长度为2。

    在第1维上从下标为2开始向后切片长度为4 (2+4 <= 6)。

  • 输出
    y.dim = [2, 4]
    y = [[ 55.1562,  85.5000,  72.8125,  94.8125],
         [ 65.9375, -46.9375,  72.4375,  68.6875]]

    若size中的维度为-1, 表示自动推导输出shape。