4 minute read



3.1.1 행렬 만들기

행벡터

대괄호를 사용해 여러 성분을 갖는 행벡터를 만들 수 있다.(쉼표 구분도 사용 가능)

x = [5 7]

결과 :

 x =

   5 7


열벡터

열벡터를 만들기 위해선 숫자를 세미콜론으로 구분한다.

x = [5;7]

결과 :

 x =

   7

   9


행렬

공백과 세미콜론을 함께 사용하면 여러 행과 열을 갖는 배열인 행렬을 만들 수 있다.

x = [3 4 5;6 7 8]

결과 :

 x =

   3  4  5

   6  7  8



3.1.2 요소 간 간격이 균일한 벡터

: 연산자로 시작점과 끝점을 지정하면 균일한 간격의 요소로 구성된 벡터가 만들어진다.

y = 5:8

결과 :

 y =

   5  6  7  8

콜론 연산자를 사용할 때는 대괄호가 필요하지 않다.


: 연산자의 디폴트 간격 값은 1. 특정 간격을 지정하고 싶다면 시작점과 끝점 사이에 간격을 지정한다.

x = 20:2:26

결과 :

 x =

   20  22  24  26


요소의 개수로 행렬 생성 - linspace

각 요소 간 간격이 아니라 원하는 요소의 개수를 이미 알고 있는 경우, linspace 함수를 사용한다.

linspace(first, last, number_of_elements)
x = linspace(0,1,5)

결과 :

 x =

   0  0.250  0.500  0.750  1.000



3.1.3 행벡터와 열벡터의 변환

그런데, linspace 연산자와 : 연산자는 모두 행벡터를 만든다. 전치 연산자 '를 이용해 행벡터를 열벡터로 변환할 수 있다.

x = 1:3;
x = x'

결과 :

 x =

   1

   2

   3

행벡터를 만들고 이를 transpose 취하는 작업을 한 줄에서 모두 수행.

x = (1:2:5)'

결과 :

 x =

   1

   3

   5



3.1.4 배열 생성 함수

난수 행렬 - rand

rand 함수는 난수로 구성된 행렬을 생성한다.

rand(size)  \\난수로 구성된 size * size 정사각행렬 생성
x = rand(5)

결과 :

 x =

   0.8147  0.0975  0.1576  0.1419  0.6557

   0.9058  0.2785  0.9706  0.4218  0.0357

   0.1270  0.5469  0.9572  0.9157  0.8491

   0.9134  0.9575  0.4854  0.7922  0.9340

   0.6324  0.9649  0.8003  0.9595  0.6787

input을 2개로 주면 nonsquere matirx도 가능.

rand(row, column) //row * column의 난수 행렬 생성
x = rand(2,3)

결과 :

 x =

   0.6324  0.2785  0.9575

   0.0975  0.5469  0.9649


정수형 난수 행렬 - randi

randi 함수는 일정 범위 사이의 정수로 이루어진 난수를 생성한다.

randi(imax) \\ 1과 imax 사이의 정수로 이루어진 난수 스칼라 반환
randi(imax, n)  \\ 구간 [1, imax]의 이산 균등분포에서 추출한 정수형 n*n 난수 행렬 반환
randi(imax, r, c) \\ 구간 [1, imax]의 이산 균등분포에서 추출한 정수형 r*c 난수 행렬 반환


영행렬 - zeros

zeros는 영행렬 생성.

zeros(row, column) // row * column 크기의 성분이 모두 0인 행렬 생성
x = zeros(2,3)

결과 :

 x =

   0  0  0

   0  0  0


3.1.5 행렬의 크기

행렬의 크기 - size

size 함수는 행렬의 크기를 반환한다.

size(x) // 행렬 x의 크기
rand(size(x)) //기존 행렬과 동일한 크기의 난수 행렬 생성
x = [1 2 3;3 4 5];
size(x);
y = rand(size(x))

결과 :

 ans =

   2  3

 y =

   0.9502  0.4387  0.7655

   0.0344  0.3816  0.7952


3.1.6 배열 요소 참조

행, 열 indexing

x = A(r, c)   // 행렬 A의 r번째 행, c번째 열의 값을 추출해 변수 x에 할당


한 행렬에 대해 하나의 index만 사용하게 되면, 첫 번째 열부터 시작해서 각각의 원소를 아래 방향으로 순회한다.

A = [1:3;4:6;7:9]
y = A(7)

결과 :

 A =

   1  2  3

   4  5  6

   7  8  9

 y =

   3


단, 벡터의 요소는 단일 인덱스로 참조 가능.

x = v(3)  // 벡터 v의 3번째 요소 반환


마지막 요소 키워드 - end

x = A(end, c)   // 행렬 A의 마지막 행, c번째 열의 값을 추출해 변수 x에 할당
y = B(r, end)   // 행렬 B의 r번째 행, 마지막 열의 값을 추출해 변수 y에 할당


키워드 end에는 산술 연산을 적용할 수 있다.

z = A(end-1, end-2)   // 행렬 A의 끝에서 두 번째 행, 끝에서 세 번째 열의 값을 추출해 변수 z에 할당


해당 차원의 모든 요소 지정 - :

콜론 연산자를 인덱스로 사용 시 해당 차원의 모든 요소가 지정된다.

x = A(2,:)  \\ A의 두 번째 행에 있는 모든 요소를 포함하는 행벡터를 생성.

물론 특정 범위의 값도 참조할 수 있다.

x = A(1:3, :) \\ A의 1~3행을 포함하는 행렬을 생성.
y = v(3:end)  \\ 벡터 v의 3번째 요소부터 마지막 요소까지를 포함하는 벡터 반환


벡터의 특정 원소 indexing

Index는 꼭 연속된 숫자여야 할 필요는 없다.

x = v([1 3 6])  \\ 벡터 v의 1, 3, 6번째 요소를 추출해 만든 벡터

이와 같이 추출하고자 하는 요소들을 배열 형태의 index로부터 추출해낼 수 있다.



3.1.7 배열 요소 수정

Indexing과 할당을 함께 사용

v(3) = 10 \\ 벡터 v의 3번째 요소를 10으로 변경
A(1, end) = 0.5 \\ 행렬 A의 1번째 행, 마지막 열의 요소를 end로 변경


물론 배열의 값을 또다른 요소의 값과 같게 할 수도 있다.

v(1) = v(2)
A(:, 1) = A(:, 2) \\ 행렬 A의 1번째 열을 2번째 열로 변경



3.1.8 배열 연산

배열 내 모든 요소에 스칼라 연산이 가능하다.

v1 = [1:6];
v2 = v1 + 3

결과 :

 v2 =

   4  5  6  7  8  9


두 배열의 크기가 같으면 서로 더할 수 있다.

v1 = [1:5];
v2 = [6:10];
v3 = v1 + v2

결과 :

 v3 =

   7  9  11  13  15


벡터의 최댓값, 최솟값 - max, min

벡터의 최댓값을 반환하는 함수.

max(v) \\ 벡터 v의 최댓값을 반환한다


max 함수에 두 개의 출력값을 지정할 수 있다. 이때 첫 번째 출력값은 입력 벡터의 최댓값, 두 번째 출력값은 이에 해당하는 인덱스 값이다.

[vMax, idx] = max(v)  \\ 벡터 v의 최댓값과 그 index.


만약 특정 출력값을 무시하고 싶다면 ~를 이용한다.

[~, idx] = max(v) \\ 벡터 v의 최댓값 index만을 출력.


min 함수 역시 같은 방식으로 작동한다. 그 외에도 sqrt, round 등도 전체 벡터 또는 배열에 대해 수행 가능한 함수.

행렬의 곱셈 - *

* 연산자는 행렬의 곱셈을 수행한다. 이때 내부 차원에 유의할 것.

A = [1 2; 3 4];
B = [2 4; 6 8];

A*B

결과 :

 ans =

   14  20

   30  44


요소별로 곱셈을 하고 싶다면 .* 연산자를 사용한다.

z = [3 4] .* [10 20]

결과 :

 z =

   30  80


다음 예시는 어떨까?

x = [1 2;3 4;5 6; 7 8].*[1;2;3;4]

결과 :

 x =

   1  2

   6  8

   15  18

   28  32

크기가 같은 배열이 아닌데도 요소별 곱셈이 가능하다. 이외에도 서로 계산 가능한 크기들이 존재. 링크를 참조.

Tags:

Categories:

Updated: