
💡 머신러닝의 주요 알고리즘은 선형대수와 통계 등에 기반한다
💡 ndarray : 넘파이의 기반 데이터 타입
ndarray를 이용해 넘파이에서 다차원(Multi-dimension) 배열을 쉽게 생성하고 다양한 연산 수행 가능
np.array() 메서드 : 파이썬의 리스트와 같은 다양한 인자를 입력받아서 ndarray로 변환하는 기능 수행shape변수는 ndarray의 크기, 즉 행과 열의 수를 tuple 형태로 가지고 있으며 이를 통해 ndarray 배열의 차원까지 알 수 있음
array1 type: <class 'numpy.ndarray'>
array1 array 형태: (3,) # 1차원 데이터 (3개 데이터)
array2 type: <class 'numpy.ndarray'>
array2 array 형태: (2, 3) # 2행 3열의 2차원 데이터 (6개 데이터)
array3 type: <class 'numpy.ndarray'>
array3 array 형태: (1, 3) # 1행 3열의 2차원 데이터 (3개 데이터)
ndarray.shape : 배열의 모양(각 차원의 크기)을 tuple로 반환ndarray.ndim : 배열의 차원 수 반환ndarray.size : 배열의 전체 원소 개수 반환ndarray.dtype : 배열 원소의 데이터 타입ndarray.itemsize : 배열의 각 원소가 메모리에서 차지하는 바이트(byte) 크기 반환ndarray.nbytes : 배열의 전체 데이터가 차지하는 메모리 크기(byte) 반환ndarray.T : 배열의 전치(transpose) 반환💡 ndarray 내의 데이터값은 숫자 값, 문자열 값, 불 값 등이 모두 가능
ndarray 내의 데이터 타입은 그 연산의 특성상 같은 데이터 타입만 가능
ndarray.astype() 메서드 : ndarray 내 데이터값의 타입 변경
astype() 에 인자로 원하는 타입을 문자열로 지정
💡 특정 크기와 차원을 가진 ndarray를 연속값이나 0 또는 1로 초기화해 쉽게 생성해야 할 필요가 있는 경우가 발생할 수 있음
- 주로 테스트용으로 데이터를 만들거나 대규모의 데이터를 일괄적으로 초기화해야 할 경우에 사용
np.arange()
np.arange(start, stop, step) : step에서는 소수점 간격도 가능!
np.zeros()
np.ones()
💡
reshape()
- ndarray를 특정 차원 및 크기로 변환
- 변환을 원하는 크기를 함수 인자로 부여
reshape()를 실전에서 더욱 효율적으로 사용하는 경우는 인자로 -1을 적용하는 경우!
-1 인자는 reshape(-1, 1)와 같은 형태로 자주 사용됨
- reshape(-1, 1)은 원본 ndarray가 어떤 형태라도 2차원이고, 여러 개의 로우를 가지되 반드시 1개의 column을 가진 ndarray로 변환됨을 보장!
- 특정한 데이터만 추출
- 원하는 위치의 인덱스 값을 지정하면 해당 위치의 데이터가 반환
- 슬라이싱(Slicing)
- 연속된 인덱스상의 ndarray를 추출하는 방식
- ‘:’ 기호 사이에 시작 인덱스와 종료 인덱스를 표시하면 시작 인덱스에서 종료 인덱스-1 위치에 있는 데이터의 ndarray 반환
- 팬시 인덱싱(Fancy Indexing)
- 일정한 인덱싱 집합을 리스트 또는 ndarray 형태로 지정해 해당 위치에 있는 데이터의 ndarray 반환
- 불린 인덱싱(Boolean Indexing)
- 특정 조건에 해당하는지 여부인 True/False 값 인덱싱 집합을 기반으로 True에 해당하는 인덱스 위치에 있는 데이터의 ndarray 반환


<axis 축 이해하기>
numpy에서의 ‘차원’은 axis의 개수를 의미!
쉽게 이해하자면 axis는 ‘너의 상위 배열이 몇 개?’ex) [[1, 2, 3], [4, 5, 6]]
- [1, 2, 3]의 경우 상위 배열인 [[1, 2, 3], [4, 5, 6]]이 있으므로 [1, 2, 3]은 axis = 1
- 따라서 axis = 1로 sum을 하면 [1, 2, 3]에 해당하는 배열의 합을 의미
- 즉, axis = 0 (수직 연산) axis = 1 (수평 연산)
- axis 연산
- axis = 0 : row 방향 축 (행 방향으로 동작)
- 책을 위로 쌓아 정리하는 것과 같음
-np.sum(ary, axis = 0)
- axis = 1 : column 방향 축 (열 방향으로 동작)
- 책을 옆으로 정리하는 것과 같음
-np.sum(ary, axis = 1)
- 3차원 배열에서의 axis 개념
- 3차원 이상의 배열에서는 축이 추가

리스트나 ndarray로 인덱스 집합을 지정하면 해당 위치의 인덱스에 해당하는 ndarray 반환
array2d[ [0, 1] , 2 ] → 인덱스가 (0, 2), (1, 2)에 해당하는 [3, 6] 반환
array2d[ [0, 1] , 0:2 ] → 인덱스가 (0, 0), (0, 1), (1, 0), (1, 1)에 해당하는 [[1, 2], [4, 5]] 반환
array2d[ [0, 1] ] → ((0, :), (1, :)) 인덱싱이 적용돼 [[1, 2, 3], [4, 5, 6]] 반환 (생략되면 : 에 해당함)

numpy에서 행렬 정렬
np.sort()
- 넘파이에서 sort()를 호출하는 방식
- 원 행렬은 그대로 유지한 채 원 행렬의 정렬된 행렬 반환
ndarray.sort()
- 행렬 자체에서 sort()를 호출하는 방식
- 원 행렬 자체를 정렬한 형태로 변환하며 반환 값은 None
np.sort()나 ndarray.sort() 모두 기본적으로 오름차순으로 행렬 내 원소 정렬np.sort()[::-1]
np.argsort
np.argsort()[::-1] 사용
np.argsort() 활용
행렬 내적 (행렬 곱)
- 행렬 내적은 행렬 곱이며, 두 행렬 A와 B의 내적은
np.dot()을 이용전치 행렬
- 원 행렬에서 행과 열의 위치를 교환한 원소로 구성한 행렬
np.transpose()이용- 2차원에서는
ndarray.T로 사용 가능

본 글은 <파이썬 머신러닝 완벽 가이드>를 기반으로 작성되었습니다.