본문 바로가기
데이터분석/넘파이

02. 행렬연산

by 사라리24 2024. 5. 22.
SMALL

 

1. 행렬 연산

  • 넘파이에서는 다차원 배열인 ndarray를 사용하여 행렬 연산을 수행할 수 있다
    (덧셈, 뺄셈, 곱셈, 나눗셈은 shape이 같아야 함/행렬의 크기가 같아야 함)
  • 행렬 연산은 선형 대수와 관련이 깊어, 데이터 과학, 머신러닝, 통계 등 다양한 분야에서 사용

 

  • 차원출력 ($행 ,$열)
 
 
        a = np.array([[1, 2, 3],
                                   [2, 3, 4]])
        b = np.array([[3, 4, 5],
                                   [1, 2, 3]])
 
        print(a.shape, b.shape)
 
 

 

  • 행열 덧셈
 
 
        # 행렬 덧셈
        print(a + b)
 
  


같은 position끼리 연산됨 - 인덱스 번호가 같은 데이터끼리 연산

 

 

  • 행열 뺄셈
  
 
        # 행렬 뺄셈
        print(a - b)
  
 


같은 position끼리 연산됨 - 인덱스 번호가 같은 데이터끼리 연산

 

 

  • 행열 곱셈
 
 
        # 행렬 원소별 곱셈(Element-wise Product)
        print(a * b)
 
 


같은 position끼리 연산됨 - 인덱스 번호가 같은 데이터끼리 연산

 

  • 행열 나눗셈
 
 
        # 행렬 나눗셈
        print(a / b)
 
 

같은 position끼리 연산됨 - 인덱스 번호가 같은 데이터끼리 연산

 

 

  • 행열 곱(Dot Product)-내적연산
    - 에러 상황
  
 
      # 행렬 곱(Dot Product)
      # 조건1: 맞닿는 shape가 같아야함
      # 조건2: 떨어져 있는 shape가 결과 행렬이 됨
        print(np.dot(a, b)) # 에러
        print(a @ b)              # 에러
  
 

 

 

  • 차원확인
 
 
        c = np.array([[1, 2, 3],
                                  [1, 2, 3],
                                  [2, 3, 4]])
        d = np.array([[1,2],
                                   [3, 4],
                                   [5, 6]])

        print(c.shape)
        print(d.shape)
      
 

 

  • 계산식
 
        print((1*1 + 2*3 + 3*5) , (1*2 + 2*4 + 3*6))
        print((1*1 + 2*3 + 3*5) , (1*2 + 2*4 + 3*6))
        print((2*1 + 3*3 + 4*5) , (1*2 + 3*4 + 4*6))
 
 

 

 

  • 정확한 표현
 
 
        c = np.array([[1, 2, 3],
                                  [1, 2, 3],
                                  [2, 3, 4]])
 
        d = np.array([[1,2]
                                 ,[3, 4],
                                  [5, 6]])
 
        print(np.dot(c, d))
        print('=' * 40)
        print(c @ d)
 
 
  

 

  • 계산과정
  
 
        # c@d
        print((1*1+2*3+3*5), (1*2+2*4+3*6),(1*1+2*3+3*5), (1*2+2*4+3*6),(2*1+3*3+4*5), (2*2+3*4+4*6))
 
  
 

 

 

  • 전치 행렬: 행과 열 바꿈
 
 
          # 전치행렬: 행과 열을 바꿈
          print(a)
          print(a.T)
 
  

 

  • 역 행렬
    : 원래 행렬과 곱했을 때 항등 행렬이 되는 행렬
  
 
          # 역행렬 : 주어진 정사각 행렬에 대한 곱셈 연산으로 단위 행렬을 얻을 수 있는 행렬
          # 단위행렬 : 주대각선의 원소가 모두 1이고, 나머지 원소가 모두 0인 정사각 행렬
          # np.linalg.inv(a) # 역행렬을 구하지 못하면 LinAlgError 에러발생
          arr = np.array([[1, 2], [3, 4]])
          print(np.linalg.inv(arr))
          print(arr @ np.linalg.inv(arr))
 
 
 




 

 

2. 순차적인 값 생성하기

 

  • NumPy에서 np.arange() 함수는 일정한 간격으로 숫자들을 생성하는 데 사용
  • Python의 기본 range() 함수와 유사하지만, NumPy 배열을 반환하므로 수학적인 연산이 가능

 

  •   range
  
 
 
          # 일반 range
          arr1 = range(1, 11)
          print(arr1)
          for i in arr1:
            print(i, end=' ')
 
 
  

 

 

  • np.arange
 
 
          # np.arange
          # 반환되는 값은 ndarray형태
          arr2 = np.arange(1, 11)
          print(arr2)
          for i in arr2:
            print(i, end=' ')
 
  

 

 

3.  정렬

  • NumPy의 np.sort() 함수는 배열을 정렬하는 데 사용
  • 기본적으로 원래 배열을 변경하지 않고 정렬된 배열의 복사본을 반환

 

  • 1차원_오름차순
 
 
        # 오름차순, 단 사용후 다시 원래대로 돌아옴
        ndarr1 = np.array([1, 10, 5, 7, 2, 4, 3, 6, 8, 9])
        print(ndarr1)
        print(np.sort(ndarr1))
        print(ndarr1)
 
  

 


 

 

  • 1차원_오름차순
 
 
 
        # 내림차순
        # reverse 속성이 없음
        ndarr1 = np.array([1, 10, 5, 7, 2, 4, 3, 6, 8, 9])
        print(np.sort(ndarr1)[::-1])
 
 
  

 

 

  • 2차원 _ 행정렬
  
 
          #  2차원_행정렬
          ndarr2d = np.array([[11, 10, 12, 9],
                                                   [3, 1, 4, 2],
                                                   [5, 6, 7, 8]])

          print(ndarr2d.shape)
          print(np.sort(ndarr2d, axis=0)) # 축속성 : 0인 경우, 행을 정렬
 
  
 

 

 

  • 2차원 _ 열정렬
 
 
        #  2차원 : 열정렬
        print(np.sort(ndarr2d, axis=1))
 
  

 

 

  • 열정렬 내림차순
  
        # 열 정렬 내림차순
        print(np.sort(ndarr2d, axis=1)[:,::-1])
 
 

 

 

  • 축의 마지막 방향
 
 
        # 축의 마지막 방향
        print(np.sort(ndarr2d, axis=-1)) # 열정렬과 동일
 
 

 

 

'데이터분석 > 넘파이' 카테고리의 다른 글

01. 넘파이(Numpy)  (0) 2024.05.22