2-5. 행렬 전치

행렬의 전치: 행과 열의 인덱스를 바꿈(1열→1행, 2열→2행, ..., 1행→1열, 2행→2열, ...), T 또는 transpose() 사용

import numpy as np
matrix=np.array([[1,2,3],
                          [4,5,6],
                          [7,8,9]])

# 행렬 전치
matrix.T

### 결과 ###
array([[1,4,7],
          [2,5,8],
          [3,6,9]])

 

벡터의 전치는 행벡터를 열벡터로 또는 열벡터를 행벡터로 바꾸는 것

벡터는 값의 모음이기 때문에 원래 기술적으로 전치할 수 없지만 대괄호를 두번 사용하면 전치 가능

matrix=np.array([[1,2,3,4,5,6]])

matrix.T

### 결과 ###
array([[1],
       [2],
       [3],
       [4],
       [5],
       [6]])

 

 

T 대신 transpose() 사용가능, transpose((차원의 튜플))을 통해 바꿀 차원을 직접 지정도 가능

# transpose() 사용
matrix=np.array([[1,2,3],
                          [4,5,6],
                          [7,8,9]])

# 행렬 전치
matrix.transpose()

### 결과 ###
array([[1,4,7],
          [2,5,8],
          [3,6,9]])


# transpose((차원 튜플)) 사용
matrix=np.array([[[1,2],
                            [3,4],
                            [5,6]],
                  
                           [[7,8],
                            [9,10],
                            [11,12]]])

matrix.transpose((0,2,1))

### 결과 ###
array([[[1,3,5],
            [2,4,6]],
           [[7,9,11],
            [8,10,12]]])

2×3×2 행렬을 transpose((0,2,1))을 적용하면 2×2×3 행렬로 전치됨, (0,2,1)은 차원의 순서를 나타내는 것으로 원래 차원의 (첫번째 숫자. 세번째 숫자, 두번째 숫자)를 의미

 

 

2-6. 행렬 펼치기

행렬을 1차원 배열로 펼치기, flatten()사용

matrix=np.array([[1,2,3],
                          [4,5,6],
                          [7,8,9]])

# 행렬 펼치기
matrix.flatten()

### 결과 ###
array([1,2,3,4,5,6,7,8,9])



# reshape() 사용으로도 똑같은 결과를 만들 수 있음
matrix.reshape(1,-1)

### 결과 ###
array([1,2,3,4,5,6,7,8,9])

reshape()는 원본의 뷰를 반환하여 원본의 값을 바꾸면 reshape()로 바꾼 배열의 값도 바뀜

flatten()은 새로운 배열을 만드는 것이므로 원본의 값을 바꿔도 값이 바뀌지 않음

 

 

 

2-7. 행렬의 랭크

행렬의 차원 수를 뜻함

 

 

 

2-8. 행렬식 계산

행렬식은 행렬을 대표하는 값으로 다음과 같이 계산

 

2×2 행렬의 행렬식

 

3×3 행렬의 행렬식

 

파이썬에서는 numpy의 선형대수 메서드 det 사용

import numpy as np
matrix=np.array([[1,5,0],
                          [2,4,-1],
                          [0,-2,0]])

# 행렬식 계산
np.linalg.det(matrix)

### 결과 ###
-1.9999999999999998

 

 

 

2-9. 행렬의 대각원소

정방행렬에서 대각선에 위치한 원소(1행1열, 2행2열, 3행3열...에 해당하는 원소), diagnoal() 사용

import numpy as np
matrix=np.array([[1,2,3],
                          [2,4,6],
                          [3,8,9]])

# 행렬의 대각원소 반환
matrix.diagonal()

### 결과 ###
array([1,4,9])

offset 매개변수를 이용하면 대각원소 하나 위 또는 아나 아래의 원소를 반환

matrix=np.array([[1,2,3],
                          [2,4,6],
                          [3,8,9]])

# 행렬의 대각원소 하나 위의 원소 반환
matrix.diagonal(offset=1)

### 결과 ###
array([2,6])


# 행렬의 대각원소 하나 아래의 원소 반환
matrix.diagonal(offset=-1)

### 결과 ###
array([2,8])

 

 

np.diag()에서 ()에 1차원 배열을 넣으면 1차원 배열을 대각원소로 하는 2차원 대각행렬을 생성

a=np.diagonal(matrix)
print(a)

### 결과 ###
array([1,4,9])


# 1차원 배열의 대각원소 사용하여 2차원 대각행렬 만들기
np.diag(a)

### 결과 ###
array([[1,0,0],
          [0,4,0],
          [0,0,9]])

 

 

trace()를 사용하여 대각원소의 합인 대각합 계산

matrix=np.array([[1,2,3],
                          [2,4,6],
                          [3,8,9]])

matrix.traace()

### 결과 ###
14
# matrix의 대각원소는 [1,4,9]이므로 1+4+9=14

'Python > 기본문법' 카테고리의 다른 글

데이터 랭글링 (2)  (0) 2023.06.26
데이터 랭글링 (1)  (0) 2023.06.23
데이터 적재  (0) 2023.06.22
Numpy로 배열, 벡터, 행렬 이해하기 (3)  (0) 2022.10.20
Numpy로 배열, 벡터, 행렬 이해하기 (1)  (0) 2022.10.17

+ Recent posts