---
title: ReduceOperation
description: "| 硬件型号 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendtb/ascendtb_01_0071.html
sourcePath: /source/zh/canncommercial/900/API/ascendtb/ascendtb_01_0071.html
indexId: 695822b38921460eeb6732ba3b00cc5d929e657bce4448a73ce8a61dc5f3327164
---
# ReduceOperation

#### 产品支持情况

| 硬件型号 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | √ |
| Atlas A3 推理系列产品 / Atlas A3 训练系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 训练系列产品 | x |
| Atlas 推理系列产品 | x |
| Atlas 200I/500 A2 推理产品 | x |


#### 功能说明

在指定维度上求和、取最大值或最小值，并消除这个维度。


#### 计算公式

- REDUCE_MAX：
相当于PyTorch中

```
intensor.amax(axis)
```


  - 示例1
    x shape: [2,3], axis: [0]

```
x:
tensor([[ 1, 18, 17],
[16, 10,  1]])
output:
tensor([16, 18, 17])
```


  - 示例2
    x shape: [2,3,2], axis: [0,1]

```
x:
tensor([[[17,  3],
[19,  6],
[ 1, 18]],
[[ 4,  5],
[ 8,  1],
[14, 18]]])
output:
tensor([19, 18])
```


- REDUCE_MIN：
相当于PyTorch中

```
intensor.amin(axis)
```


  - 示例1
    x shape: [2,3], axis: [0]

```
x:
tensor([[16,  2,  7],
[18, 16, 17]])
output:
tensor([16,  2,  7])
```


  - 示例2
    x shape: [2,3,2], axis: [0,1]

```
x:
tensor([[[ 9,  4],
[11,  0],
[ 2,  6]],
[[ 2,  7],
[ 8, 16],
[ 5,  3]]])
output:
tensor([2, 0])
```


- REDUCE_SUM：
相当于PyTorch中

```
torch.sum(intensor, axis)
```


  - 示例1
    x shape: [2,3], axis: [0]

```
x:
tensor([[-0.9701, -0.8059,  0.2919],
[-0.1444, -2.3023,  1.2257]])
output:
tensor([-1.1145, -3.1082,  1.5176])
```


  - 示例2
    x shape: [2,3,2], axis: [0,1]

```
x:
tensor([[[ 1.4630, -0.3619],
[-0.4526, -1.0142],
[-0.2883,  0.9334]],
[[ 0.7801, -0.1580],
[ 0.4843,  1.8145],
[ 0.9706, -1.8114]]])
output:
tensor([ 2.9571, -0.5976])
```


#### 定义

```
struct ReduceParam {
    enum ReduceType {
        REDUCE_UNDEFINED = 0,
        REDUCE_MAX,
        REDUCE_MIN,
        REDUCE_SUM,
    };
    ReduceType reduceType = REDUCE_UNDEFINED;
    SVector<int64_t> axis;
    uint8_t rsv[8] = {0};
};
```


#### 参数列表

| 成员名称 | 类型 | 默认值 | 描述 |
| --- | --- | --- | --- |
| reduceType | ReduceType | REDUCE\_UNDEFINED | 计算类型，支持以下参数： REDUCE\_UNDEFINED：未定义。 REDUCE\_MAX：求最大值。 REDUCE\_MIN：求最小值。 REDUCE\_SUM：求和。 此默认类型不可用，用户须配置此项参数。 |
| axis | SVector<int64\_t> | {} | 指定轴（维度）。 axis不能为空且长度要求小于等于输入x的维度。 axis可以支持多个轴上进行处理，各元素要求小于x的维度且大于等于0。 |
| rsv[8] | uint8\_t | {0} | 预留参数。 |


#### 输入

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| x | [dim\_0, dim\_1, ..., dim\_n] | REDUCE\_MAX/REDUCE\_MIN：int32/bf16 REDUCE\_SUM：float16/bf16 | ND | 输入tensor。 |


#### 输出

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| output | 基于输入“x”的维度，消除axis要求的维度。 | REDUCE\_MAX/REDUCE\_MIN：int32/bf16 REDUCE\_SUM：float16/bf16 | ND | 输出tensor。 |


#### 约束说明

- axis中各元素要求小于x的维度且大于等于0。
- reduceType必须是REDUCE_MAX、REDUCE_MIN或REDUCE_SUM。
