0

에 MLMultiArray 내부 요소에 액세스하는 방법은 initWithDataPointer를 사용하여 MLMultiArray를 초기화 한이 link, subscript 요구에 언급 된 MLMultiArray 문서를 바탕으로 은 CoreML

float count = 512 * 384; 
    double *tempBuffer = malloc(count * sizeof(double)); 
    NSError *error = NULL; 
    NSArray *shape = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:512],[NSNumber numberWithInt:384], nil]; 
    NSArray *stride = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:1],[NSNumber numberWithInt:1], nil]; 

    MLMultiArray *mlMultiArray = [[MLMultiArray alloc] initWithDataPointer:tempBuffer 
                    shape:shape 
                   dataType:MLMultiArrayDataTypeDouble 
                   strides:stride 
                  deallocator:^(void * _Nonnull bytes) { free(bytes); } 
                    error:&error]; 

은 요소에 액세스하는 데 사용되어야한다.

표시된 방법으로 요소에 액세스하는 경우 올바른 것입니까?

NSNumber *val = [mlMultiArray objectForKeyedSubscript:[NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:1],[NSNumber numberWithInt:1], nil]]; 

답변

1

난 당신이 mlMultiArray.dataPointer을 사용하는 것이 좋습니다, double *에 캐스팅 한 후 직접 데이터 버퍼의 내용을 액세스 할 수 있습니다. 당신은 요소 i, j, k이 스트라이드를 사용하고있는 위치를 계산할 수 있습니다 :

double *ptr = (double *) mlMultiArray.dataPointer; 
NSInteger offset = i*stride[0].intValue + j*stride[1].intValue + k*stride[2].intValue; 
double val = ptr[offset]; 
+0

고마워요, 내가 언급 한 것조차도 작동합니다. 어떻게 든 스트라이드 값이 잘못되었습니다. –