다음을 통해 공유


DML_NONZERO_COORDINATES_OPERATOR_DESC 구조체(directml.h)

입력 텐서의 0이 아닌 모든 요소의 N차원 좌표를 계산합니다.

이 연산자는 각 행 M이 입력에서 0이 아닌 값의 N차원 좌표를 포함하는 값의 MxN 행렬을 생성합니다. 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입니다.

크기가 인 InputTensor 고려합니다{1,1,12,5}. 이 입력 텐서에는 60개의 요소가 포함되며 유효 순위는 2입니다. 이 예제에서 OutputCoordinatesTensor 의 모든 유효한 크기는 형식 {1,1,60,N}입니다. 여기서 N >= 2이지만 DimensionCount 보다 크지는 않습니다(이 예제에서는 4).

이 텐서에 기록된 좌표는 오름차순 요소 인덱스로 정렬되도록 보장됩니다. 예를 들어 입력 텐서의 좌표 , 및 에 0이 아닌 3개의 {1,0}값이 있는 경우 OutputCoordinatesTensor에 기록된 값은 입니다[[0,5], [1,0], [1,2]].{0,5}{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도입되었습니다.

텐서 지원

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], 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