파이썬 머신러닝 완벽 가이드 - 1. Numpy

Mios·2022년 9월 26일
1

🧮 Numpy 넘파이

1. 데이터 생성 및 수정

  • 데이터 타입: ndarray
  • array(): 인자를 받아 ndarray로 변환
  • arange(): 연속된 숫자(정수)를 ndarray로 변환 예) np.arange(10): 0~9의 숫자를 ndarray로 만듦
  • zeros(): shape 값을 입력하면 0으로 채운 뒤 해당 shape를 가진 ndarray를 반환
    예) np.zeros((3,2))
  • ones(): shape 값을 입력하면 1로 채운 뒤 해당 shape를 가진 ndarray를 반환
  • reshape(): 차원, 크기 변환
    예) array1.reshape(2, 5)

2. 인덱싱 indexing

  • 단일값
  • 슬라이싱
    • array2d[ :2, 0 ] : 한 쪽은 슬라이싱, 한쪽은 단일을 적용해도 된다.
  • 팬시 인덱싱 : 리스트나 ndarray로 인덱스 집합을 지정하면, 해당 위치의 인덱스에 해당하는 ndarray를
    • array2d[ [0, 1], 0:2 ] 반환하는 인덱싱 방식
  • 불린 인덱싱: [ ] 안에 array1d > 5 Boolean indexing을 적용
    • array3 = array1d[ array1d > 5 ] : [ ] 안에 조건 넣기
    • boolean_indexes = np.array([False, False, False, False, False, True, True, True, True])
      array3 = array1d[boolean_indexes] : 위의 거랑 같음
    • indexes = np.array([5,6,7,8])
      array4 = array1d[ indexes ] : 위의 거랑 같음

3. 데이터 정렬 - sort( )와 argsort( )

  • 행렬 정렬(기본적으로 list와 비슷)

    • np.sort(ndarray) : 원행렬은 유지, 정렬된 행렬 반환 ⇒ 기본 오름차순, [::-1]로 내림차순
      • np.sort( )[::-1] : 내림 차순 정렬시 슬라이싱 사용
    • ndarray.sort( ) : 원행렬을 정렬, None 반환(원행렬을 sort하여 inplace 됨)
      • ndarray[::-1].sort( ) : 사실상 슬라이싱으로 순서를 바꾸는 거
  • 2차원 이상 행렬 정렬 : axis값 이용해서 row 방향, col 방향 정렬

    • sort_array2d_axis0 = np.sort(array2d, axis=0) : row 방향 정렬 (axis=0)
    • sort_array2d_axis1 = np.sort(array2d, axis=1) : col 방향 정렬 (axis=1)
  • 정렬 행렬의 인덱스 반환 : 원본 행렬이 정렬 됐을 때, 기존 행렬 원소에 대한 인덱스가 피요할 때

    • np.argsort(ndarray): 원본 행렬 정렬 시, 행렬 인덱스 값 반환
      • org_array = np.array([ 3, 1, 9, 5]) sort_indices = np.argsort(org_array) print(type(sort_indices)) print('행렬 정렬 시 원본 행렬의 인덱스:', sort_indices)
        >> <class 'numpy.ndarray'>
        행렬 정렬 시 원본 행렬의 인덱스: [1 0 3 2]
    • np.argsort(ndarray)[: : -1] : 원본 행렬 내림차순 정렬시, 행렬 인덱스 값 반환
      • org_array = np.array([ 3, 1, 9, 5]) sort_indices_desc = np.argsort(org_array)[::-1] print('행렬 내림차순 정렬 시 원본 행렬의 인덱스:', sort_indices_desc)
        >> 행렬 내림차순 정렬 시 원본 행렬의 인덱스: [2 3 0 1]
    • RDBMS의 TABLE 칼럼이나 Pandas의 DataFrame 칼럼과 같은 메타 데이터 갖기 어려우므로,
      [실제 값]과 [그 값이 뜻하는 메타 데이터]를 별도의 ndarray로 각각 가져야 함
      - # [그 값이 뜻하는 메타 데이터] name_array = np.array(['John', 'Mike', 'Sarah', 'Kate', 'Samuel'])
      # [실제 값] score_array= np.array([78, 95, 84, 98, 88])
      `sort_indices_asc = np.argsort(score_array)
      print('성적 오름차순 정렬 시 score_array의 인덱스:', sort_indices_asc)
      print('성적 오름차순으로 name_array의 이름 출력:', name_array[sort_indices_asc])`
      *>>  성적 오름차순 정렬 시 score_array의 인덱스: [0 2 4 1 3]
             성적 오름차순으로 name_array의 이름 출력: ['John' 'Sarah' 'Samuel' 'Mike' 'Kate']*

4. 선형대수 연산

  • np.dot( A, B ): 행렬 곱(내적)
  • np.transpose(A): 전치 행렬
profile
mios의 데이터 놀이터 | Instagram@data.decision (하단 홈 아이콘 버튼)

0개의 댓글