---
title: SliceOperation
description: "| 硬件型号 | 是否支持 | 特殊说明 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendtb/ascendtb_01_0078.html
sourcePath: /source/zh/canncommercial/900/API/ascendtb/ascendtb_01_0078.html
indexId: 372b0e59f149596f9797df1d02d59bc6b94bf777906247149ae38b9d51185c8f64
---
# SliceOperation

#### 产品支持情况

| 硬件型号 | 是否支持 | 特殊说明 |
| --- | --- | --- |
| Atlas 350 加速卡 | √ | \- |
| Atlas A3 推理系列产品 / Atlas A3 训练系列产品 | √ | \- |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ | \- |
| Atlas 训练系列产品 | √ | \- |
| Atlas 推理系列产品 | √ | 不支持bf16数据类型。 |
| Atlas 200I/500 A2 推理产品 | √ | 仅支持float16数据类型。 |


#### 功能说明

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


#### 算子上下文

图1 SliceOperation算子上下文


#### 定义

```
struct SliceParam {
    SVector<int64_t> offsets;
    SVector<int64_t> size;
    uint8_t rsv[8] = {0};
};
```


#### 参数列表

| 成员名称 | 类型 | 默认值 | 描述 |
| --- | --- | --- | --- |
| offsets | SVector<int64\_t> | \- | 每个维度切片的起始位置。 offsets[i] 可以为正或负： offsets[i] >= 0：从第 offsets[i] 个元素开始，即实际起始位置为offsets[i]。 offsets[i] < 0：从倒数第 \|offsets[i]\| 个元素开始，即实际起始位置为 dimNum + offsets[i]。 要求：实际起始位置 >= 0 且 < dimNum。 |
| size | SVector<int64\_t> | \- | 每个维度切片的大小。 size[i] 的取值范围为：大于 0 或等于 \-1；不允许为 0。 size[i] = \-1 表示切片在第 i 维延伸到该维的末尾。 size[i] > 0 表示切片长度为 size[i]。 对于第 i 维，维度大小为 dimNum，定义实际起始位置和实际长度： 实际起始位置： 若 offsets[i] >= 0：actual\_offset = offsets[i] 若 offsets[i] < 0：actual\_offset = dimNum + offsets[i] 实际长度： 若 size[i] > 0：actual\_size = size[i] 若 size[i] = \-1：actual\_size = dimNum \- actual\_offset 合法性检查： actual\_offset >= 0 actual\_offset < dimNum actual\_offset + actual\_size <= dimNum actual\_size > 0 |
| rsv[8] | uint8\_t | {0} | 预留参数。 |


#### 输入

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| x | [dim\_0, dim\_1, ..., dim\_n] | float16/float/int8/bool/int32/uint32/bf16 | ND | 输入tensor。 |


#### 输出

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| output | 和参数size表示的shape一样 | float16/float/int8/bool/int32/uint32/bf16 | ND | 输出tensor，维度的大小为size指定的大小。与x的数据类型相同。 |


#### 调用接口示例

- 输入

```
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。
