Numpy 활용-1

김상우·2022년 3월 1일

Python

목록 보기
3/14
post-thumbnail

완전 기초부터 시작하는 파이썬

Numpy

행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리 할 수 있도록 지원하는 파이썬의 라이브러리

이번엔 numpy를 활용한 연산을 진행했을 때 다른점을 알아보고자 동일한 숫자의 합이 연산되는 속도를 비교해보았다.

  • 예제 1

    • for문을 활용한 무작위로 생성된 배열의 합

      # 무작위 배열의 합
      import numpy as np
      import time
      
      start_time = time.time()
      
      input_arr = np.random.randint(0, 10, 100000000)
      
      # for code
      sum_val = 0
      for val in input_arr:
          sum_val += val
        
      print("합 : ", sum_val)
      
      end_time = time.time()
      for_time = end_time - start_time
      print("수행시간 : ", for_time)
    • 결과

      합 : 449944158
      수행시간 : 21.721976041793823

    • numpy를 활용한 코드

      # numpy code
      start_time = time.time()
      
      input_arr = np.random.randint(0, 10, 100000000)
      print()
      
      end_time = time.time()
      np_time = end_time - start_time
      print("수행시간 : ", np_time)
    • 결과

      수행시간 : 2.6243231296539307

    • for을 활용한 코드와 numpy를 활용한 코드로 같은 연산을 했을 때의 연산 시간 비교

      print("수행시간 비율 : ", for_time / np_time)
    • 결과

      수행시간 비율 : 8.277172805567696

for문을 활용했을 때 간단한 합연산을 진행한 결과 수행시간이 numpy를 이용한 합연산보다 약 8배 많은 시간을 소요했다는 것을 결과로 알 수 있었다.

  • 예제 2

    • 최대 최소값 구하는 코드
    # 최대 최소값 구하기
    import numpy as np
    import time
    
    start_time = time.time()
    
    input_arr = np.random.randint(-12, 10, 900000)
    
    # for문 활용
    max_val, min_val = None, None
    for val in input_arr:
        if max_val == None or val > max_val:
            max_val = val
        if min_val == None or val < min_val:
            min_val = val
          
    end_time = time.time()
    for_time = end_time - start_time
    
    print(max_val, min_val)
    
    start_time = time.time()
    
    # numpy 활용
    max_val = input_arr.max()
    min_val = input_arr.min()
    
    end_time = time.time()
    np_time = end_time - start_time
    
    print(max_val, min_val)
    
    print(for_time)
    print(np_time)
    
    print(for_time / np_time)
    • 결과

      9 -12
      9 -12
      0.2864990234375
      0.0008158683776855469
      351.1583869082408

for문을 통한 일반적인 활용방법보다 numpy에 내장되어 있는 함수로 코드를 구성하는 것이 예제 2번에서는 351배의 속도차이가 있다는 것을 확인할 수 있었다.

  • 예제 3

    # 랜덤한 배열에서 최대 최소값이 어느 위치에 있는지 찾기
    import numpy as np
    
    input_arr = np.random.randint(0, 1000, 1000)
    
    # for문 활용
    M, m = None, None
    M_idx, m_idx = 0, 0
    
    for val_idx in range(len(input_arr)):
        if M == None or input_arr[val_idx] > M:
            M = input_arr[val_idx]
            M_idx = val_idx
          
        if m == None or input_arr[val_idx] < m:
            m = input_arr[val_idx]
            m_idx = val_idx
    
    print(M, M_idx, m, m_idx)
    
    # numpy 활용
    M = input_arr.max()
    m = input_arr.min()
    
    M_idx = np.argmax(input_arr)
    m_idx = np.argmin(input_arr)
    
    print(M, M_idx, m, m_idx)
  • 결과

    997 27 1 787
    997 27 1 787

이러나 저러나 본인은 for문을 먼저 익숙하게 활용해야 할 것 같다. ㅎㅎ..

profile
아침엔 운동하고 밤엔 잠을 잔다.

0개의 댓글