초급-MATLAB 해양자료처리

MATLAB - 배열 Array

Kamanberr 2023. 5. 17. 16:22

모든 MATLAB 변수는 배열이다.

그렇기 때문에, 배열이 무엇인지 이해하는 것은 매우 중요하다. 

아래 그림을 보자.

(출처 : Mathworks Onramp, 이후에 나오는 여러 그림들 또한 Mathworks Onramp의 그림을 인용하였다.)

그림에 나온 것처럼, 가장 큰 개념이 Array이다. 그 아래에 크게 3가지 종류가 있다. 

1. 1 x 1 : Scalar

2. m x 1  또는 1 x n : Vector

3. m x n : Matrix

 

그렇다면 MATLAB에서는 Array를 어떻게 만들까? 그 방법은 매우 간단하다.

 

1. Scalar

x=4;

2. Vector

 2-1) Vector의 내부 값을 일일히 입력하기

 세미콜론 (;)으로 열을 구분한다.

x = [ 3 5 ];		% 행 벡터
y = [ 3 ; 5 ]; 		% 열 벡터

 2-2) 콜론 연산자 사용하기

    시작점과 끝점만 지정하면 균일한 간격의 요소로 구성된 벡터를 간단히 만들 수 있다. 콜론 연산자를 사용할 경우에는 대괄호가 필요하지 않다. 그리고 디폴트 간격은 1이며, 1보다 큰 간격을 원한다면 특정 간격을 지정할 수도 있다.

y1 = 5 : 8;
y2 = 20 : 2: 28;

  2-3) 함수로 행렬 만들기

  만들고자 하는 벡터에서 각 요소 간 간격이 아니라 원하는 요소의 개수를 이미 알고 있는 경우, linspace 함수를 사용할 수 있다. linspace 함수에 대한 입력값은 쉼표로 구분한다.

% Linspace
x = linspace( first, last, number_of_elements );

 

3. MATRIX 

 1) 행렬의 내부 값을 일일히 입력하기 (세미콜론 (;)으로 열을 구분한다.)

x = [ 2 3 4 ; 5 6 7 ];

 2) 행렬 내부 값이 모두 동일하게 만들 경우, zeros, ones, nan 함수를 사용한다. 이 함수를 사용하면 각각 0, 1, NAN으로만 채워진 행렬을 반환한다. 

A = zeros(2,3);
B = ones(2,3);
C = nan(2,3);

 


 

빈 행렬 (Empty Matrix)  → 대괄호 [ ] 이용

이미 만들어져 있는 행렬에서 특정 행 또는 열의 내용을 비워버리는 것도 가능하다. 

다음과 같은 배열이 있다고 해보자.

a = [1 3 5 ; 7 8 9 ; 10 12 13 ];

여기서 세번째 열의  내용을 비우고 싶다면, 다음과 같이 작성하면 된다.

a(:,3) = [];
size(a)

 

그러면 a의 size가 3, 2로 나오는 것을 확인할 수 있다. 

 


인덱싱 Indexing

인덱싱은 단언컨대, MATLAB의 하이라이트라고 할 수 있다. 아주 기본적인 것이지만, 처음 할 때는 까다롭고, 하지만 앞으로 MATLAB 인생에 있어서 매우 중요하다. 그러니 잘 익혀두도록 하자.

 

인덱싱 : 배열에서 요소를 참조하는 것. 즉, 배열에서 특정 값을 추출해내는 것을 말한다.

인덱스 : 배열 내 특정 값의 위치. 이 인덱스를 사용하여 배열 내 값을 추출할 수 있다. 

(아래 그림에서 파란색 글씨가 인덱스이다. 여기서 Python과 다른 점이 있는데, Python의 인덱스는 0부터 시작하고, MATLAB의 인덱스는 1부터 시작한다!! MATLAB과 Python을 동시에 배우면 이런 사소한 점이 헷갈리므로 주의할 것!!)

 

예를 들어, 배열의 3번째 값이 필요할 경우, 

x(3);이라고 하면 x라는 배열의 3번째 값을 뽑아 낼 수 있다.

, 내가 원하는 값이 배열에서 어느 위치에 있는지 안다면, 그 값을 추출하거나 수정할 수 있다.

x(3)=1; 이라고 하면 원래 6이 들어있던 3번째 자리에는 6 대신 1이 들어간다.

 

또한, 콜론과 함께, 시작과 끝 인덱스를 적어주면, 특정 범위 내의 값을 추출할 수도 있다.

벡터가 아닌, 행렬에서 인덱싱을 하고 싶다면,

(행 번호, 열 번호)를 지정하여 값을 추출할 수 있다.

 

 

 

콜론 하나만을 이용하여 인덱싱을 하는 경우, 행 또는 열 전체를 지정할 수 있다.

 

end를 행 인덱스 또는 열 인덱스로 사용하면 마지막 요소를 참조할 수 있다.
y = A(2,end);

 

참고로 end에 아래와 같이 산술 연산을 적용할 수도 있다.
y = A(end-1,end-2);

 


배열 연산 :  스칼라

배열 내 모든 요소에 스칼라 값을 더할 수 있다.

x = [ 3 4 5 ; 6 7 8 ];

y = x + 1;

 

동일한 크기인 두 배열은 서로 더할 수 있다.

z  = x + y;

 

배열 내 모든 요소에 스칼라 값을 곱하거나 나눌 수 있다.

x2 = x*2;

x3 = x/2;

 

배열 연산 : 행렬 곱셈

* 연산자는 행렬 곱셈을 수행한다. 따라서 *를 사용하여 크기가 동일한 두 개의 벡터를 곱할 경우 내부 차원이 동일하지 않으므로 아래와 같은 오류 메시지가 표시된다.
z = [3 4] * [10 20]
Error using * Incorrect dimensions for matrix multiplication.

반대로 .* 연산자는 요소별 곱셈을 수행하므로, 이 연산자를 사용하면 크기가 동일한 두 배열 내 대응하는 요소끼리 곱할 수 있게 된다.
z = [3 4] .* [10 20]
z = 30 80

 

'초급-MATLAB 해양자료처리' 카테고리의 다른 글

MATLAB - Plotting  (0) 2023.09.16
MATLAB - 제어문  (1) 2023.09.16
MATLAB 시작 - 4 : 실습  (0) 2023.04.25
MATLAB 시작 - 3 : 주석 달기 & 퍼블리시 기능  (0) 2023.04.25
MATLAB 시작 - 2  (0) 2023.04.25