ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자료구조] list 와 Array(배열)
    지식저장소 2023. 6. 27. 23:24
    728x90

    1. 파이썬 리스트

    • 파이썬에서 리스트는 내장된 데이터 구조로 items의 collection을 가진다.
    • 리스트는 "[ ]" 안에 묶인다. ex) [1, 2, 3]
    • 리스트는 변경이 가능하다. (추가 및 제거 가능)
    • 리스트는 중복이 가능하다. ex) [1, 1, 1]
    • 리스트는 여러가지 데이터 타입을 넣을 수 있다. str, int 등등

    2. 파이썬 배열

    • 파이썬에서 배열도 리스트랑 같이 내장된 데이터 구조로 items의 collection을 가진다.
    • 리스트의 특징과 유사하다. ex) 대괄호, 정렬, 변경가능 ,중복가능
    • 반면, 넘파이 어레이는 숫자형과 문자열이 섞이면 모두 문자열로 전환됩니다.(한가지 자료형만 허용한다.)

    - Numpy 

    import numpy as np
    array = np.array(["1", 2, 3])
    print(array)
    ['1' '2' '3']
    <class 'numpy.str_'>

     

    선언 조건

    2차원 이상의 배열 구조를 나타낼 수 있지만 문제는 Numpy에서 내부 배열의 크기가 같아야한다.

    list_a = [[1], [2, 3], [4, 5, 6]] # 가능O
    array_b = np.array([[1], [2, 3], [4, 5, 6]]) # 개수가 달라서 array 선언 불가능
    
    #array_b 출력결과
    Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.

     

     

    연산

    리스트 연산

    • 리스트의 연산은 데이터를 이어 붙이는 concatenate를 수행합니다.
    • 다른 연산은 허용X 
      하지만, 곱셉의 경우 원소 복사 수행합니다. ex) [1, 2, 3] * 3 = [1, 2, ,3, 1, 2, 3, 1, 2, 3]

    Numpy 연산

    • 항목 간 연산을 수행합니다.
    • 리스트와 다르게 다른 사칙연산이 가능합니다.
    • 실수에 대한 사칙 연산도 가능하다. ex) a + 2
    • 여기서 연산을 할때 각 객체의 개수는 같아야 합니다.
    #리스트 연산
    a = [1, 5, 7]
    b = [2, 4, 8]
    
    a+b # [1, 5, 7, 2, 4, 8]
    
    a*3 # [1, 5, 7, 1, 5, 7, 1, 5, 7]
    
    
    # Numpy 연산
    a = np.array([1, 5, 7])
    b = np.array([2, 4, 8])
    
    a+b # array([3, 9, 15])
    a+2 # array([3, 7, 9])
    a*3 # array([3, 15, 21])

    메소드

    자료형 종류가 다르기 때문에 지원하는 메소드 종류도 다릅니다.

    리스트 : append, extend, remove 등등 가능합니다. (해당 메소드는 Numpy에서 불가능)

    넘파이: mean, argmax, round 등등 사용가능합니다 (해당 메소드는 list에서 불가능)

    연산 속도

    같은 연산의 경우 일반적으로 Numpy가 연산에 최적화 되어있습니다.

    import time
    
    # 리스트 연산 속도
    a = list(range(10 ** 8))
    
    start = time.time()
    for i in range(10 ** 8):
        a[i] *= 2
    end = time.time()
    print(end - start) # 약 17.35초
    
    # 어레이 연산 속도
    a = np.array(range(10 ** 8))
    
    start = time.time()
    a = a * 2
    end = time.time()
    print(end - start) # 약 1.35초

    Numpy가 약 13배정도 연산속도가 빠른 것으로 보여집니다.

    728x90
Designed by Tistory.