DML_NONZERO_COORDINATES_OPERATOR_DESC構造体 (directml.h)

入力テンソルのすべての 0 以外の要素の N 次元座標を計算します。

この演算子は、値の MxN 行列を生成します。各行 M には、入力からの 0 以外の値の N 次元座標が含まれます。 FLOAT32またはFLOAT16入力を使用する場合、負と正の両方の 0 (0.0f と -0.0f) は、この演算子の目的で 0 として扱われます。

演算子では、 OutputCoordinatesTensor に、入力のすべての要素が 0 以外の最悪のシナリオに対応できる十分な大きさが必要です。 この演算子は 、OutputCountTensor を介して 0 以外の要素の数を返します。呼び出し元は 、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*

入力テンソル内の 0 以外の要素の数を保持する出力テンソル。 このテンソルはスカラーである必要があります。つまり、このテンソルのサイズはすべて 1 である必要があります。 このテンソルの型は UINT32 である必要があります。

OutputCoordinatesTensor

型: const DML_TENSOR_DESC*

0 以外の入力要素の N 次元座標を保持する出力テンソル。

このテンソルのサイズ{1,1,M,N} は 、(DimensionCount が 4 の場合)、または {1,1,1,M,N} (DimensionCount が 5 の場合) である必要があります。ここで、M は InputTensor 内の要素の合計数であり、N は入力の DimensionCount までの InputTensor有効ランク以上である必要があります。

テンソルの有効ランクは、サイズ 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) を超えるサイズはありません。

このテンソルに書き込まれた座標は、要素インデックスを昇順で並べ替えることが保証されます。 たとえば、入力テンソルの座標 {1,0}、 {1,2}、および {0,5}に 3 つのゼロ以外の値がある場合、 OutputCoordinatesTensor に書き込まれる値は になります [[0,5], [1,0], [1,2]]

このテンソルには、入力テンソル内の要素の数と等しいディメンション 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以上

テンソル 種類 Dimensions サポートされているディメンション数 サポートされるデータ型
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], M, N } 2 から 8 UINT32

DML_FEATURE_LEVEL_3_0以上

テンソル 種類 Dimensions サポートされているディメンション数 サポートされるデータ型
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
Header directml.h