주요 콘텐츠

coder.findOrError

생성된 C/C++ 코드에서 배열의 0이 아닌 요소의 인덱스 및 값 찾기

R2026a 이후

설명

k = coder.findOrError(X,n)은 배열 X에서 0이 아닌 요소에 해당하는 처음 n개의 선형 인덱스를 반환합니다. X 인수만 제공할 경우, coder.findOrErrorn에 대해 디폴트 값 1을 사용합니다.

  • X가 벡터이면 kX와 동일한 방향을 갖는 벡터입니다.

  • X가 다차원 배열이면 k는 열 벡터입니다.

  • X가 코드 생성 시에는 가변 크기 행렬이고 런타임 시에는 행 벡터이면, 생성된 MEX 함수의 출력은 행 벡터가 아니라 열 벡터입니다.

MATLAB® 실행 시, 배열 X에 0이 아닌 요소가 n개보다 적게 포함된 경우 coder.findOrErrorfind와 동일하게 동작합니다. 이러한 입력에 대해 코드 생성은 컴파일타임 오류 또는 런타임 오류를 생성합니다.

참고

코드 생성 시 항상 가변 길이 벡터를 반환하는 find 함수와 달리, coder.findOrError 함수는 코드 생성 동안 인수 n이 상수인 경우 고정 길이 n을 갖는 벡터를 반환합니다. 배열 X에 0이 아닌 요소가 n개보다 적게 포함된 경우 coder.findOrError는 컴파일타임 오류 또는 런타임 오류를 생성합니다.

예제

k = coder.findOrError(X,n,direction)direction'last'인 경우, X의 0이 아닌 요소에 해당하는 마지막 n개 인덱스를 찾습니다. direction의 디폴트 값은 'first'이며, 이 경우 0이 아닌 요소에 해당하는 처음 n개 인덱스를 찾습니다.

예제

[row,col] = coder.findOrError(___)는 위에 열거된 구문에 나와 있는 입력 인수를 사용하여 배열 X의 0이 아닌 요소에 대한 행 첨자와 열 첨자를 반환합니다.

[row,col,v] = coder.findOrError(___)X의 0이 아닌 요소가 포함된 벡터 v도 반환합니다.

예제

예제

모두 축소

이 예제에서는 고정 크기 행렬에서 처음 n개의 0이 아닌 요소에 대한 선형 인덱스를 찾습니다. 여기서 n은 코드 생성 시 상수입니다. n이 상수이므로, coder.findOrError의 출력은 길이가 n인 고정 크기 벡터입니다. 이 예제에서는 n에 대해 값 3을 사용합니다.

3×4 행렬에서 처음 세 개의 0이 아닌 요소에 대한 선형 인덱스를 반환하는 진입점 함수 locateFirstThreeNonzeroElements를 정의합니다.

function k = locateFirstThreeNonzeroElements(X)
arguments
    X (3,4) double
end

k = coder.findOrError(X,3);
end

0이 아닌 요소의 예상 개수가 상수이므로 생성 코드에서 출력 k는 고정 크기 3을 갖습니다. 또한 입력 배열 X도 고정 크기입니다. 따라서 이 함수에 대한 코드를 생성할 때 가변 크기 배열 지원을 비활성화할 수 있습니다.

고정 크기 배열만 사용하는 locateFirstThreeNonzeroElements에 대한 MEX 함수를 생성합니다.

cfg = coder.config("mex");
cfg.EnableVariableSizing = false;
codegen -config cfg locateFirstThreeNonzeroElements
Code generation successful.

생성된 MEX 함수를 3×4 입력 배열을 지정하여 실행합니다. 이 함수는 입력 배열에서 처음 세 개의 0이 아닌 요소에 대한 선형 인덱스를 반환합니다.

locateFirstThreeNonzeroElements_mex([0 1 1 0; 0 0 0 0; 1 0 1 0])
ans =

  3×1 int32 column vector

   3
   4
   7

생성된 MEX 함수를 0이 아닌 요소를 두 개만 포함하는 다른 3×4 입력 배열을 지정하여 실행합니다. 이 함수는 런타임 오류를 생성합니다.

locateFirstThreeNonzeroElements_mex([0 1 0 0; 0 0 0 0; 1 0 0 0])
Function coder.findOrError expects 3 non-zero elements, but receives 2.

이 예제에서는 unbounded(크기 비제한) 가변 크기 행 벡터에서 마지막 n개의 0이 아닌 요소의 값을 찾습니다. 여기서 n 값은 런타임 시 제공됩니다. n이 코드 생성 시 상수가 아니므로, coder.findOrError의 출력은 가변 크기 벡터입니다.

unbounded(크기 비제한) 가변 크기 행 벡터 X에서 마지막 n개의 0이 아닌 요소의 값을 반환하는 진입점 함수 findLastNNonzeroElements를 정의합니다.

function v = findLastNNonzeroElements(X,n)
arguments
    X (1,:) double
    n (1,1) double
end

[~,~,v] = coder.findOrError(X,n,"last");
end

디폴트 구성 설정을 사용하여 findLastNNonzeroElements에 대한 MEX 함수를 생성합니다. 입력 배열 X가 unbounded(크기 비제한) 가변 크기이므로, 생성 코드에서 가변 크기 데이터 및 동적 메모리 할당에 대한 지원이 모두 활성화되어야 합니다.

codegen findLastNNonzeroElements
Code generation successful.

생성된 MEX 함수를 샘플 입력을 지정하여 실행합니다. 이 함수는 입력 벡터에서 처음 네 개의 0이 아닌 요소에 대한 선형 인덱스를 반환합니다.

findLastNNonzeroElements_mex([1 3 0 0 0 3 4 2 0],4)
ans =

     3     3     4     2

입력 인수

모두 축소

입력 배열로, 스칼라, 벡터, 행렬 또는 다차원 배열로 지정됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
복소수 지원 여부:

찾고자 하는 0이 아닌 요소의 개수로, 양의 정수 스칼라로 지정됩니다.

탐색 방향으로, 문자열 "first" 또는 "last"로 지정됩니다. find(X,n,"last")를 사용하여 X에서 마지막 n개의 0이 아닌 요소를 찾습니다.

출력 인수

모두 축소

0이 아닌 요소에 대한 인덱스로, int32 값으로 구성된 벡터로 반환됩니다.

X(k)를 사용하여 X의 0이 아닌 값을 반환할 수 있습니다.

행 첨자로, int32 값으로 구성된 벡터로 반환됩니다. rowcol은 함께 X의 0이 아닌 요소에 해당하는 X(row,col) 첨자를 지정합니다.

열 첨자로, int32 값으로 구성된 벡터로 반환됩니다. rowcol은 함께 X의 0이 아닌 요소에 해당하는 X(row,col) 첨자를 지정합니다.

XN > 2인 다차원 배열인 경우, colXN-1 후행 차원에 대한 선형 인덱스입니다. 이를 통해 X(row(i),col(i)) == v(i) 관계가 유지됩니다.

X의 0이 아닌 요소로, 벡터로 반환됩니다.

확장 기능

모두 확장

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.

버전 내역

R2026a에 개발됨

참고 항목

도움말 항목