• 튜플 Tuple
    • 튜플은 리스트와 비슷하지만, 다른점 존재 ⇒ 리스트 = []/튜플 = () 튜플은 값을 바꿀 수 없음(오류로 나옴)
  • 집합 Set
    • 집합에서는 중복을 허용하지 않는다. (요소들간의 중복 x)
    • 리스트, 튜플은 순서가 있기에 인덱싱 / 집합, 사전은 순서가 없기에 key-value
    • 예시 : set([3,2,1,2,3]) ⇒ {1,2,3}, set(”Hello”) ⇒ {o, H, e, l}
    • 자료의 값을 쓸 때, 리스트로 자료형 변환을 해서 사용한다.
    • 집합으로서의 기능이 존재
      • method메소드로 구현됨
        • set.intersection : 교집합
        • set.union : 합집합
        • set.difference : 차집합
        • set.add : 값 1개 추가
        • set.update : 값 여러개 추가
        • set.remove : 특정 값 제거
  • 넘파이 Numpy
    • 넘파이는 계산과학분야에서 많이 쓰이는 라이브러리(리스트보다 성능이 훨씬 좋음)
      • Numerical Python의 줄임말
      • 설치 방법 : pip install numpy /
      • 라이브러리 사용법 import numpy as np
    • 넘파이에서 제공하는 자료형 = 배열
      • 요소들이 같은 자료형이다! ≠ 리스트와 다름
      • 리스트에서 사용할 수 없는 브로드캐스트 연산 방식 지원
      • 머신러닝에서도 주로 사용하는 자료구조임
    • 1차원 배열 생성 예시
      • arr = np.array([0,2,5,7]) (np.array(list) 리스트를 인자로 받음
      • print(arr) ⇒ [0 2 5 7]
      • np의 속성
        • arr.ndim : 차원수 (몇차원 배열인지?) ⇒ 예시에서 1
        • arr.shape : 각 차원의 크기 ⇒ (4,)
          • 튜플형식으로 나옴 튜플에서 요소가 1개이면 콤마로 표시함
        • arr.dtype : 요소 자료형
        • arr.size : 전체 요소 개수
    • 2차원 배열 생성 예시
      • arr = np.array([[1, 2, 3], [4,5,6]])
        • print(arr) ⇒ [[1 2 3]

                               [4 5 6]]
          
          • arr.shape ⇒ (2, 3) = (행, 열)
    • arr = np.zeros(N) : N개 만큼 0이 생성되는 배열을 만들어줌 (dtype 기본이 float64로 나옴)
      • 동적할당느낌, 리스트는 이런게 안됨
      • np.ones ⇒ ‘1.’으로 채워짐
        • (np.ones(5,dtype = int)) ⇒ 정수형으로 채워짐
      • np.zeros((4,2)) ⇒ 4행 2열로 0을 채워줌
    • arr = np.arange(N) : 0부터 N-1까지의 숫자로 배열을 채움
      • np.arange(3,10,2) ⇒ 2씩 증가 : [3 5 7 9]으로 생성
      • arange를 선언하고 arr.reshape(3,4)를 선언하면 3행 4열로 바뀜(arr = np.arange(12).reshape(3,4) 도 가능)
        • 때에 따라서 2차원 데이터를 반대로 1차원으로 바꾸고 싶다면, **arr.reshape(-1)**을 해주면 됌
          • reshape(-1,2) ⇒ 열만 2면돼! 행은 상관없어! 상관없는 것을 -1로 두면 자동으로 6행 2열로 바뀜
    • 넘파이 요소 값 접근 및 변경
      • 기본적인 것은 배열과 같음(인덱스를 통한 변경)

        • 다른 자료형으로 수정은 안됌 (정수형 배열에 실수형으로 수정하면 소수부분은 날라감)
      • 다차원 인덱싱 & 슬라이싱

        • np.arange(20).reshape(4,5)
          • arr[0] = 첫번째 행 인덱싱 ([0 1 2 3 4])
          • arr[0][1:3] = 특정 행에 대한 슬라이싱 ([1 2])
          • arr[2, 1] = arr[2][1] = 2,1에 접근해!
          • arr[[0, 2], [1, 3]] ⇒ [1 13] 0,2와 1,3에 접근해!
          • 특정 행, 열만 슬라이싱
            • arr[:,1:3] ⇒ [[1 2] 열만 슬라이싱(행은 상관x)

                                 [6 7]
              
                                 [11 12]
              
                                 [16 17]]
              
      • 넘파이 브로드캐스팅

        • shape이 다른 넘파이 배열끼리 연산을 수행 like행렬계산

          image.png

      • 리스트와의 차이점

        • list = [0,1,2,3,4]*2 = [0,1,2,3,4,0,1,2,3,4] 리스트전체가 반복 복사됨
        • arr = np.arange(5), arr2 = arr*2 ⇒ [0 2 4 6 8] 넘파이 배열 각 요소에 산술적 곱셈이 적용
          • [0 1 2 3 4] * [2 2 2 2 2] 한 것과 같다