주요 콘텐츠

빈 배열

MATLAB®에서 빈 배열은 요소가 없는 배열입니다. 빈 배열은 "없음" 개념을 프로그래밍으로 표현하는 데 유용합니다. 빈 배열에는 특정한 차원이 있으며, 이러한 차원 중 하나 이상은 0입니다. 가장 간단한 빈 배열은 0×0이지만, 빈 배열은 0×5 또는 3×0×5와 같이 0이 아닌 차원을 가질 수 있습니다.

빈 배열 만들기

0×0 배열을 만들려면 어떤 값도 지정하지 않고 대괄호를 사용하십시오. size 함수를 사용하여 배열 차원을 확인합니다.

A = []
A =

     []
size(A)
ans = 1×2

     0     0

빈 배열을 만들어야 하는 경우에는 대부분 0×0 배열이면 충분합니다. 하지만 zeros 또는 ones 같은 함수를 사용하면 다양한 크기의 빈 배열을 만들 수 있습니다. 예를 들어, 0×5 행렬과 3×0×5 배열을 만들어 보겠습니다.

B = zeros(0,5)
B =

  0×5 empty double matrix
C = ones(3,0,5)
C =

  3×0×5 empty double array

대괄호, zeros, ones는 디폴트 double 데이터형의 빈 숫자형 배열을 만듭니다. 텍스트를 데이터로 사용하는 빈 배열을 만들려면 strings 함수를 사용하십시오. 이 함수는 문자 없이 지정된 크기의 string형 배열을 만듭니다. 예를 들어, 0×5 크기의 빈 string형 배열을 만들어 보겠습니다.

S = strings(0,5)
S = 

  0×5 empty string array

임의 데이터형의 빈 배열을 만들려면 createArray를 사용할 수 있습니다(R2024a 이후). 예를 들어, 8비트 부호 있는 정수형 int8의 5×0 행렬을 만들어 보겠습니다.

D = createArray(5,0,"int8")
D =

  5×0 empty int8 matrix

연산 결과가 비어 있는 경우

어떤 연산에서는 빈 배열을 반환할 수 있습니다. 이런 빈 배열의 장점은 알고리즘 실행 시 비어 있는 상황에 대한 별도의 처리가 필요 없다는 점입니다.

예를 들어, find 함수를 사용하여 행 벡터에서 0보다 작은 요소를 모두 찾습니다. 벡터의 모든 요소가 0보다 큰 경우 지정된 조건을 충족하는 요소가 없으므로 find는 인덱스를 나타내는 빈 행 벡터를 반환합니다.

A = [1 2 3 4];
ind = find(A < 0)
ind =

  1×0 empty double row vector

빈 행 벡터로 인덱싱해도 빈 행 벡터가 반환됩니다.

B = A(ind)
B =

  1×0 empty double row vector

빈 결과는 행렬이나 다차원 배열일 수도 있습니다. 예를 들어, 이 코드는 행렬 A에서 부분행렬 B를 추출하며, 여기서 B에는 A의 0이 아닌 모든 행이 포함됩니다.

A = zeros(5,3);
dim = 2;
B = A(any(A,dim),:)
B =

  0×3 empty double matrix

모든 행렬 A에 대해 B의 크기는 p×q이며, 여기서 pA에서 0이 아닌 값이 하나라도 있는 행 개수이고 qA의 열 개수입니다. A에 0이 아닌 값을 가진 행이 없으면 B는 0×q 크기의 빈 배열입니다. B가 빈 배열일 수 있으므로 비어 있는 상황에 대한 특별한 처리 없이 A에서 0이 아닌 행의 개수를 구할 수 있습니다.

n_nonzero_rows = size(B,1)
n_nonzero_rows = 
0

비어 있는 결과를 명시적으로 확인하려면 isempty 함수를 사용하면 됩니다.

if isempty(B)
   disp("All rows of A contain all zeros.")
else
   disp("There are " + size(B,1) + " rows in A with nonzero values.")
end
All rows of A contain all zeros.

빈 배열에 대한 연산

일반 행렬과 일반 배열에 대해 정의된 모든 연산은 빈 배열까지 확장됩니다. m 또는 n이 0인 경우에도 연산에는 m×n 배열이 포함될 수 있습니다. 이러한 연산의 결과 크기는 비어 있지 않은 배열을 사용하여 연산할 때 생성되는 결과의 크기와 일치합니다.

호환되는 크기의 배열은 요소별 연산 실행 중에 자동으로 동일한 크기로 확장됩니다. 자세한 내용은 기본 연산에 대해 호환되는 배열 크기 항목을 참조하십시오.

예를 들어, 플러스 연산자(+)는 요소별 연산자입니다. b가 스칼라인 경우에는 A가 비어 있더라도 A + bA와 같은 크기의 출력값을 생성합니다.

A = zeros(1,0,2)
A =

  1×0×2 empty double array
C = A + 5
C =

  1×0×2 empty double array

마찬가지로, 한쪽 입력값이 빈 행렬 A이고 다른 쪽 입력값은 A와 행 개수가 같은 열 벡터 B인 경우 A + BA와 같은 크기의 출력값을 생성합니다.

A = zeros(4,0)
A =

  4×0 empty double matrix
B = ones(4,1)
B = 4×1

     1
     1
     1
     1

C = A + B
C =

  4×0 empty double matrix

하지만 prod 함수 및 sum 함수와 같이, 벡터별로 연산하는 함수도 있습니다. 이러한 함수는 벡터 입력값에 대해 스칼라 출력값을 생성하고 행렬 입력값에 대해 벡터 출력값을 생성합니다. 또한 이러한 함수는 입력값에 빈 배열이 포함된 경우 수학적 규칙을 따릅니다.

비어 있지 않은 입력 행렬의 경우 prod 함수는 입력 행렬의 각 열 벡터에 대한 벡터별 연산을 합니다. 빈 입력 배열의 경우 빈 곱은 인자 없이 곱한 결과이므로 prod 함수는 1을 반환합니다. 수학적 규칙에 따라 이 곱의 결과는 곱셈 항등원과 같습니다. 예를 들어, 비어 있지 않은 행렬과 빈 행렬 각각에 대해 열에 있는 요소의 곱을 구해 보겠습니다.

C = prod([1 2 3; 2 3 4; 3 4 5])
C = 1×3

     6    24    60

C = prod([])
C = 
1
C = prod(zeros(0,3))
C = 1×3

     1     1     1

빈 배열 결합하기

데이터에 특정한 초기값이 없는 경우 데이터를 저장하고 구성할 때 빈 배열을 사용할 수 있습니다. 빈 배열을 비어 있지 않은 배열과 결합하여 빈 배열을 동적으로 늘릴 수 있습니다.

빈 배열을 비어 있지 않은 배열과 결합할 경우 MATLAB은 빈 배열을 생략하고 출력값에서 빈 배열의 크기를 무시합니다. 예를 들어, 빈 배열 data를 만든 다음 루프에서 확장해 보겠습니다.

data = [];
for k = 1:3
    data = [data rand(1,2)]
end
data = 1×2

    0.8147    0.9058

data = 1×4

    0.8147    0.9058    0.1270    0.9134

data = 1×6

    0.8147    0.9058    0.1270    0.9134    0.6324    0.0975

첫 번째 루프 반복에서 0×0 크기의 빈 배열이 1×2 크기의 비어 있지 않은 배열과 결합되어 1×2 크기의 출력값이 생성됩니다. 각 반복에서 배열에 새 데이터가 추가됩니다.

서로 호환되는 크기를 갖는 빈 배열을 두 개 결합하면 입력값이 비어 있지 않은 것처럼 출력값 크기와 동일한 크기를 갖는 빈 배열이 생성됩니다. 예를 들어, 크기가 0×5인 빈 배열을 만들어 보겠습니다. 이러한 배열 두 개를 가로와 세로 방향으로 결합하여 다른 배열을 만듭니다. 그 결과는 각각 크기가 0×10과 0×5인 빈 배열입니다.

A = zeros(0,5);
B_horizontal = [A A]
B_horizontal =

  0×10 empty double matrix
B_vertical = [A; A]
B_vertical =

  0×5 empty double matrix

자리 표시자 입력 인수로 사용되는 빈 배열

일부 MATLAB 함수는 빈 배열을 자리 표시자 입력 인수로 받습니다.

예를 들어, max 함수는 배열의 최대 요소를 구합니다. A가 행렬인 경우 max(A)를 사용하여 A에서 각 열의 최댓값을 구할 수 있습니다.

A = [1 7 3;
     6 2 9];
m = max(A)
m = 1×3

     6     7     9

max 함수에 비어 있지 않은 두 번째 입력값을 지정하면 두 입력값에서 가장 큰 요소가 반환됩니다.

B = [5 5 5;
     8 8 8];
M = max(A,B)
M = 2×3

     5     7     5
     8     8     9

A의 모든 요소에 대한 최댓값을 구하려면 빈 배열을 max의 두 번째 인수로 전달한 다음 "all"을 지정합니다.

m = max(A,[],"all")
m = 
9

대괄호를 사용하여 행 또는 열 제거하기

기존 행렬에서 행이나 열을 제거하는 구문에도 대괄호를 사용합니다.

예를 들어, 행렬에서 세 번째 열을 제거해 보겠습니다.

A = magic(3)
A = 3×3

     8     1     6
     3     5     7
     4     9     2

A(:,3) = []
A = 3×2

     8     1
     3     5
     4     9

이 컨텍스트에서 []은 0×0 크기의 빈 배열을 나타내지 않습니다. A(:,3) = zeros(0,0)에서처럼 빈 배열을 A(:,3)에 대입하면 대입식의 좌변과 우변의 크기가 일치하지 않으므로 이 코드는 오류를 반환합니다.

참고 항목

도움말 항목