빈 배열
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
의 크기는 ×이며, 여기서 는 A
에서 0이 아닌 값이 하나라도 있는 행 개수이고 는 A
의 열 개수입니다. A
에 0이 아닌 값을 가진 행이 없으면 B
는 0× 크기의 빈 배열입니다. 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.
빈 배열에 대한 연산
일반 행렬과 일반 배열에 대해 정의된 모든 연산은 빈 배열까지 확장됩니다. 또는 이 0인 경우에도 연산에는 × 배열이 포함될 수 있습니다. 이러한 연산의 결과 크기는 비어 있지 않은 배열을 사용하여 연산할 때 생성되는 결과의 크기와 일치합니다.
호환되는 크기의 배열은 요소별 연산 실행 중에 자동으로 동일한 크기로 확장됩니다. 자세한 내용은 기본 연산에 대해 호환되는 배열 크기 항목을 참조하십시오.
예를 들어, 플러스 연산자(+
)는 요소별 연산자입니다. b
가 스칼라인 경우에는 A
가 비어 있더라도 A + b
는 A
와 같은 크기의 출력값을 생성합니다.
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 + B
는 A
와 같은 크기의 출력값을 생성합니다.
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)
에 대입하면 대입식의 좌변과 우변의 크기가 일치하지 않으므로 이 코드는 오류를 반환합니다.