# DML_ARGMAX_OPERATOR_DESC structure (directml.h)

Outputs the indices of the maximum-valued elements within one or more dimensions of the input tensor.

Each output element is the result of applying an *argmax* reduction on a subset of the input tensor. The *argmax* function outputs the index of the maximum-valued element within a set of input elements. The input elements involved in each reduction are determined by the provided input axes. Similarly, each output index is with respect to the provided input axes. If all input axes are specified, then the operator applies a single *argmax* reduction, and produces a single output element.

## Syntax

```
struct DML_ARGMAX_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *OutputTensor;
UINT AxisCount;
const UINT *Axes;
DML_AXIS_DIRECTION AxisDirection;
};
```

## Members

`InputTensor`

Type: **const DML_TENSOR_DESC***

The tensor to read from.

`OutputTensor`

Type: **const DML_TENSOR_DESC***

The tensor to write the results to. Each output element is the result of an *argmax* reduction on a subset of elements from the *InputTensor*.

*DimensionCount*must match*InputTensor.DimensionCount*(the rank of the input tensor is preserved).*Sizes*must match*InputTensor.Sizes*, except for dimensions included in the reduced*Axes*, which must be size 1.

`AxisCount`

Type: **UINT**

The number of axes to reduce. This field determines the size of the *Axes* array.

`Axes`

Type: _Field_size_(AxisCount) **const UINT***

The axes along which to reduce. Values must be in the range `[0, InputTensor.DimensionCount - 1]`

.

`AxisDirection`

Type: **DML_AXIS_DIRECTION**

Determines which index to select when multiple input elements have the same value.

**DML_AXIS_DIRECTION_INCREASING**returns the index of the first maximum-valued element (for example,`argmax({3,2,1,2,3}) = 0`

)**DML_AXIS_DIRECTION_DECREASING**returns the index of the last maximum-valued element (for example,`argmax({3,2,1,2,3}) = 4`

)

## Examples

The examples in this section all use this same two-dimensional input tensor.

```
InputTensor: (Sizes:{3, 3}, DataType:FLOAT32)
[[1, 2, 3],
[3, 0, 4],
[2, 5, 2]]
```

### Example 1. Applying *argmax* to columns

```
AxisCount: 1
Axes: {0}
AxisDirection: DML_AXIS_DIRECTION_INCREASING
OutputTensor: (Sizes:{1, 3}, DataType:UINT32)
[[1, // argmax({1, 3, 2})
2, // argmax({2, 0, 5})
1]] // argmax({3, 4, 2})
```

### Example 2. Applying *argmax* to rows

```
AxisCount: 1
Axes: {1}
AxisDirection: DML_AXIS_DIRECTION_INCREASING
OutputTensor: (Sizes:{3, 1}, DataType:UINT32)
[[2], // argmax({1, 2, 3})
[2], // argmax({3, 0, 4})
[1]] // argmax({2, 5, 2})
```

### Example 3. Applying *argmax* to all axes (the entire tensor)

```
AxisCount: 2
Axes: {0, 1}
AxisDirection: DML_AXIS_DIRECTION_INCREASING
OutputTensor: (Sizes:{1, 1}, DataType:UINT32)
[[7]] // argmax({1, 2, 3, 3, 0, 4, 2, 5, 2})
```

## Remarks

The output tensor sizes must be the same as the input tensor sizes, except for the reduced axes, which must be 1.

When *AxisDirection* is DML_AXIS_DIRECTION_INCREASING, this API is equivalent to DML_REDUCE_OPERATOR_DESC with DML_REDUCE_FUNCTION_ARGMAX.

A subset of this functionality is exposed through the DML_REDUCE_OPERATOR_DESC operator, and is supported on earlier DirectML feature levels.

## Availability

This operator was introduced in `DML_FEATURE_LEVEL_3_0`

.

## Tensor constraints

*InputTensor* and *OutputTensor* must have the same *DimensionCount*.

## Tensor support

### DML_FEATURE_LEVEL_4_1 and above

Tensor | Kind | Supported dimension counts | Supported data types |
---|---|---|---|

InputTensor | Input | 1 to 8 | FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |

OutputTensor | Output | 1 to 8 | INT64, INT32, UINT64, UINT32 |

### DML_FEATURE_LEVEL_3_0 and above

Tensor | Kind | Supported dimension counts | Supported data types |
---|---|---|---|

InputTensor | Input | 1 to 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |

OutputTensor | Output | 1 to 8 | INT64, INT32, UINT64, UINT32 |

## Requirements

Minimum supported client |
Windows 10 Build 20348 |

Minimum supported server |
Windows 10 Build 20348 |

Header |
directml.h |