DML_NONZERO_COORDINATES_OPERATOR_DESC 结构 (directml.h)

计算输入张量的所有非零元素的 N 维坐标。

此运算符生成值 MxN 矩阵,其中每行 M 都包含输入的非零值的 N 维坐标。 使用 FLOAT32FLOAT16 输入时,负和正 0 (0.0f 和 -0.0f) 将被视为零,以用于此运算符。

运算符要求 OutputCoordinatesTensor 的大小足够大,以适应输入的每个元素都非零的最坏情况。 此运算符通过 OutputCountTensor 返回非零元素的计数,调用方可以检查该计数以确定写入 OutputCoordinatesTensor 的坐标数。

语法

struct DML_NONZERO_COORDINATES_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputCountTensor;
  const DML_TENSOR_DESC *OutputCoordinatesTensor;
};

成员

InputTensor

类型: const DML_TENSOR_DESC*

输入张量。

OutputCountTensor

类型: const DML_TENSOR_DESC*

一个输出张量,用于保存输入张量中非零元素的计数。 此张量必须是标量 ,即此张量的大小必须全部为 1。 此张量的类型必须为 UINT32

OutputCoordinatesTensor

类型: const DML_TENSOR_DESC*

一个输出张量,用于保存非零输入元素的 N 维坐标。

如果 DimensionCount{1,1,M,N} 4) ,则此张量的大小必须为 (;{1,1,1,M,N}如果 DimensionCount 为 5) ,则此张量的大小必须为 (,其中 M 是 InputTensor 中的元素总数,N 大于或等于 InputTensor的有效排名,最高为输入的 DimensionCount

张量的有效排名由该张量(不包括大小 1 的前导维度)的 DimensionCount 确定。 例如,大小为 的 {1,2,3,4} 张量的有效排名为 3,大小为 的张量同样有效 {1,1,5,5,5}。 具有大小的 {1,1,1,1} 张量的有效排名为 0。

请考虑大小为 的 {1,1,12,5}InputTensor。 此输入张量包含 60 个元素,有效秩为 2。 在此示例中 ,OutputCoordinatesTensor 的所有有效大小都采用 形式 {1,1,60,N},其中 N >= 2,但不大于本示例中的 DimensionCount (4) 。

写入此张量中的坐标保证按升序元素索引进行排序。 例如,如果输入张量在坐标 、 和 处有 3 个非零值,则写入 OutputCoordinatesTensor 的值将为 [[0,5], [1,0], [1,2]]。{0,5}{1,2}{1,0}

虽然此张量要求其维度 M 等于输入张量中的元素数,但此运算符将只向此张量写入 OutputCount 元素的最大数目。 OutputCount 通过标量 OutputCountTensor 返回。

注意

此运算符完成后,将不定义 OutputCount 之外的此张量的其他元素。 不应依赖于这些元素的值。

示例

InputTensor: (Sizes:{1,1,2,4}, DataType:FLOAT32)
[[1.0f,  0.0f, 0.0f,  2.0f],
 [-0.0f, 3.5f, 0.0f, -5.2f]]

OutputCountTensor: (Sizes:{1,1,1,1}, DataType:UINT32)
[4]

OutputCoordinatesTensor: (Sizes:{1,1,8,3}, DataType:UINT32)
[[0, 0, 0],
 [0, 0, 3],
 [0, 1, 1],
 [0, 1, 3],
 [0, 0, 0], // 
 [0, 0, 0], // Values in rows >= OutputCountTensor (4 in
 [0, 0, 0], // this case) are left undefined
 [0, 0, 0]] // 

注解

可用性

此运算符是在 中引入的 DML_FEATURE_LEVEL_3_0

Tensor 支持

DML_FEATURE_LEVEL_4_0及更高版本

种类 维度 支持的维度计数 支持的数据类型
InputTensor 输入 { [D0], [D1], [D2], [D3], [D4], [D5], [D6], D7 } 1 到 8 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8
OutputCountTensor 输出 { [1], [1], [1], [1], [1], [1], [1], 1 } 1 到 8 UINT32
OutputCoordinatesTensor 输出 { [1], [1], [1], [1], [1], [1], [1], M, N } 2 到 8 UINT32

DML_FEATURE_LEVEL_3_0及更高版本

种类 维度 支持的维度计数 支持的数据类型
InputTensor 输入 { [D0], D1, D2, D3, D4 } 4 到 5 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8
OutputCountTensor 输出 { [1], 1, 1, 1, 1 } 4 到 5 UINT32
OutputCoordinatesTensor 输出 { [1], 1, 1, M, N } 4 到 5 UINT32

要求

要求
最低受支持的客户端 Windows 10内部版本 20348
最低受支持的服务器 Windows 10内部版本 20348
标头 directml.h