[MATLAB] 행렬과 배열 1/2

YJ·2024년 9월 8일

MATLAB 공부하기

목록 보기
2/19
post-thumbnail

배열 생성, 결합

  • 요소를 쉼표(,)나 공백으로 구분
  • 전체 원소들은 대괄호([ ])로 감싼다.
  • 행이 여러개인 행렬을 만들기 위해서는 행을 세미콜론(;)으로 구분
  • 쉼표(,)나 세미콜론(;)을 사용하여 배열 결합 가능
  • 배열 인덱싱 사용 가능
  • 콜론(:)을 사용하여 배열 요소를 여러개 참조하거나 등 간격 배열 생성 가능
>> a = [1, 2, 3] %행 벡터

a =

     1     2     3

>> b = [1 2 3; 4 5 6;7 8 9]

b =

     1     2     3
     4     5     6
     7     8     9
>> A = [a;a]

A =

     1     2     3
     1     2     3

>> A = [a,a]

A =

     1     2     3     1     2     3

>> A = [a;b]

A =

     1     2     3
     1     2     3
     4     5     6
     7     8     9
>> c = A(2,3)

c =

     3

>> A(2,:)

ans =

     1     2     3

>> A(:,3)

ans =

     3
     3
     6
     9

>> A(:,:)

ans =

     1     2     3
     1     2     3
     4     5     6
     7     8     9

>> A(:)

ans =

     1
     1
     4
     7
     2
     2
     5
     8
     3
     3
     6
     9

>> A(2:7)

ans =

     1     4     7     2     2     5

>> B = [0:5:50]

B =

     0     5    10    15    20    25    30    35    40    45    50

배열 인덱싱 참고

만약 행렬이 이미 존재하지 않을때, 배열 인덱싱을 사용하면

  • 정해준 값 외에는 0이 들어감
>> B(2, 3) = 5

B =

     0     0     0
     0     0     5

>> C(3,1:3) = [1,2,3]

C =

     0     0     0
     0     0     0
     1     2     3

>> X = [] % null 행렬

X =

     []

특수한 행렬

  • eye(m, n) : 주대각선이 1인 m by n 행렬
  • zeros(m, n) : 0으로 채워진 m by n 행렬
  • ones(m. n) : 1로 채워진 m by n 행렬
  • rand(m, n) : 0 ~ 1사이의 랜덤한 수(uniform 분포에서 뽑음)로 구성된 m by n 행렬
  • rand(m, n) : 0 ~ 1사이의 랜덤한 수(uniform 분포에서 뽑음)로 구성된 m by n 행렬
  • randn(m, n) : -∞ ~ ∞ 사이의 랜덤한 수(정규 분포에서 뽑음)로 구성된 m by n 행렬
  • diag(v) : 대각성분이 벡터 v인 대각행렬 생성
>> eye(2,3)

ans =

     1     0     0
     0     1     0

>> zeros(3,2)

ans =

     0     0
     0     0
     0     0

>> ones(2,3)

ans =

     1     1     1
     1     1     1

>> rand(2,3)

ans =

    0.8147    0.1270    0.6324
    0.9058    0.9134    0.0975

>> randn(2,1)

ans =

   -0.4336
    0.3426

>> v = [1 2 3]

v =

     1     2     3

>> diag(v)

ans =

     1     0     0
     0     2     0
     0     0     3

행렬 추출 함수와 변형 함수

  • diag(A) : 행렬 A의 대각성분을 벡터로 추출
  • diag(A, 숫자) : 행렬 A의 (숫자)번째 upper off-diagona을 벡터로 추출
  • rot90 : 행렬를 90도 회전 (반시계방향으로)
  • fliplr : 행렬의 왼쪽과 오른쪽을 flip
  • flipud : 행렬의 위쪽과 아래쪽 flip
  • tril : 행렬의 lower triangular part 추출
  • triu : 행렬의 upper triangular part 추출
  • A(:) : A의 모든 요소를 열벡터로 표현
>> diag(a)

ans =

     1
     5

>> diag(a,1)

ans =

     2
     6

>> diag(a,2)

ans =

     3

>> diag(a,-1)

ans =

     4

>> rot90(a)

ans =

     3     6
     2     5
     1     4

>> fliplr(a)

ans =

     3     2     1
     6     5     4

>> tril(a)

ans =

     1     0     0
     4     5     0

>> triu(a)

ans =

     1     2     3
     0     5     6

>> a(:)

ans =

     1
     4
     2
     5
     3
     6

전치와 reshape

A‘ : A의 전치행렬

  • 참고) A‘는 켤레복소수 전치, A.’는 전치 (transpose(A)와 동일)

reshape(A, p, q) : A를 p by q 행렬로 reshape


>> A = [1 4 7 10;2 5 8 11;3 6 9 12]

A =

     1     4     7    10
     2     5     8    11
     3     6     9    12

>> A'

ans =

     1     2     3
     4     5     6
     7     8     9
    10    11    12

>> B = reshape(A, 2, 6)

B =

     1     3     5     7     9    11
     2     4     6     8    10    12

행렬 결합

>> A = [1 0 0; 0 1 0;0 0 1], u = [5 6 7], v = [2;3;4]

A =

     1     0     0
     0     1     0
     0     0     1

u =

     5     6     7

v =

     2
     3
     4
  • 위와 같이 정의했을때 아래와 같이 행렬 혹은 벡터 간에 결합이 가능하다.
>> [A; u]

ans =

     1     0     0
     0     1     0
     0     0     1
     5     6     7

>> [A v]

ans =

     1     0     0     2
     0     1     0     3
     0     0     1     4

행렬 지우기

A =

     1     4     7    10
     2     5     8    11
     3     6     9    12

>> A(2,:) = []

A =

     1     4     7    10
     3     6     9    12

>> A = [1 4 7 10;2 5 8 11;3 6 9 12]

A =

     1     4     7    10
     2     5     8    11
     3     6     9    12

>> A(:,2:4) = []

A =

     1
     2
     3

행렬 결합

  • 결합하는 배열의 차원이 일치한다면 행렬 결합 가능
>> B = [ones(3) zeros(3,2); zeros(2,3) 4 * eye(2)]

B =

     1     1     1     0     0
     1     1     1     0     0
     1     1     1     0     0
     0     0     0     4     0
     0     0     0     0     4

>> [ones(3) + eye(3), zeros(3,1) ones(3,1); eye(2,3), rot90(diag([-2,-2]))]

ans =

     2     1     1     0     1
     1     2     1     0     1
     1     1     2     0     1
     1     0     0     0    -2
     0     1     0    -2     0
  • 대각행렬도 결합 가능
>> d = [2 4 6 8];
>> d1 = [-3 -3 -3];
>> d2 = [-1 -1];
>> D = diag(d) + diag(d1,1) + diag(d2,-2)

D =

     2    -3     0     0
     0     4    -3     0
    -1     0     6    -3
     0    -1     0     8

간격 배열 생성

  • v = InitialValue:Increment:FianlValue
    • 그래프 x축 생성할 때 자주 쓰임
  • linespae(a, b, n) : a에서 b까지 길이가 n인 선형 간격 벡터 생성
    • u = linespace(a, b, n), u = a: (b-a) / (n-1) : b → 둘은 같은 표현
>> a = 1:2:12

a =

     1     3     5     7     9    11
profile
제 글이 유익하셨다면 ♡와 팔로우로 응원 부탁드립니다.

0개의 댓글