티스토리 뷰
Numpy는 다차원 행렬을 다루기 위한 파이썬 라이브러리입니다. 머신러닝 및 딥러닝 코드를 분석하거나 작성하려면 어느 정도는 반드시 잘 숙지하고 있어야 합니다. 본 책에선 Numpy의 수많은 기능 중 기초이자 핵심적인 부분만을 다룹니다.
np.array() : 파이썬 리스트 같은 다양한 인자를 ndarray 타입으로 변환합니다.
ndarray.shape, nidm 변수로 크기와 차원을 알 수 있습니다. shape의 반환값은 튜플입니다.
ndarray 내의 모든 원소의 데이터 타입은 같습니다. 예를들어, int와 float를 같이 담을 수 없습니다.
ndarray는 tolist() 메서드를 통해 파이썬 리스트로 캐스팅할 수 있습니다.
만약 서로 다른 데이터 타입이 들어있는 리스트를 ndarray 객체로 만든다면, 데이터 크기가 더 큰 데이터 타입으로 자동 형변환됩니다.
ndarray 내 데이터값의 타입 변경은 astype() 메서드로 할 수 있습니다. 보통 메모리를 절약하기 위해 사용할 수 있습니다. 파이썬 기반 머신러닝 알고리즘은 데이터를 메모리로 전체 로딩한 후에 알고리즘을 적용하기 때문에, 대용량의 데이터를 로딩할 때 속도가 느려지거나 메모리가 부족할 수 있어 꽤 중요한 전처리가 될 수 있습니다.
ndarray를 편리하게 생성하는 방법으로 arange, zeros, ones 메서드가 있습니다. 생성할 ndarray의 shape나 데이터 타입을 지정할 수 있습니다. 디폴트 자료형은 float64입니다.
reshape 메서드를 통해 ndarray의 차원 및 크기를 조작할 수 있습니다. 실전 코드에선 인자에 -1을 적절히 활용할 수 있습니다. -1를 쓰면 원래의 ndarray 크기와 호환되는 shape로 크기가 변경됩니다. reshape(-1, 1)은 여러 개의 row를 갖되 반드시 1개의 column을 가지는 ndarray로 크기를 변환하라는 뜻입니다.
ndarray 인덱싱 하는 방법을 소개하겠습니다. 단일 값 추출, 슬라이싱, 팬시 인덱싱, 불린 인덱싱이 있습니다.
다차원 ndarray에서 단일 값 추출하는 방법은 각 axis마다 쉼표로 구분하여 위치를 특정하면 됩니다. axis 0이 row 방향이고 axis 1이 column 방향입니다. 추출한 단일 데이터의 타입은 ndarray가 아님을 주의합시다.
슬라이싱을 이용해 연속한 데이터를 추출할 수 있습니다. 슬라이싱, 팬시 인덱싱, 불린 인덱싱으로 추출한 데이터는 모두 ndarray 타입입니다. 또한, 2차원 ndarray에서 [0]과 같이 인덱싱을 한다면 axis 0(row 축)의 첫 번째 ndarray를 반환합니다. 마찬가지로, 3차원 ndarray에서 똑같이 인덱싱을 한다면 2차원 ndarray를 반환합니다.
팬시 인덱싱은 리스트나 ndarray로 인덱스 집합을 지정하여 값을 추출하는 방법입니다.
불린 인덱싱은 조건 필터링과 검색을 동시에 수행해주기 때문에 매우 자주 사용됩니다. 대괄호 내에 조건을 적어주면, 해당 조건을 만족하는 원소만 추출해줍니다. array1 > 5의 반환값은 ndarray의 모든 원소에 대한 조건식의 결과를 담고있는 ndarray 객체입니다. 이 객체가 array1의 대괄호 안에 들어가기 때문에, array1에 대한 팬시 인덱싱입니다. False는 무시하고, True 값이 있는 위치 인덱스 값으로 자동 변환되어 해당하는 인덱스 위치의 데이터만 반환합니다. 즉, [5, 6, 7, 8]이 만들어지고 해당하는 위치의 값만 팬시 인덱싱됩니다.
ndarray를 정렬하는 방법을 알아봅시다. np.sort() 메서드는 원본 ndarray를 보존한 채, 정렬된 ndarray 객체를 반환합니다. 반면 ndarray에서 바로 .sort()를 호출하면 반환값은 None이며 바로 해당 ndarray가 바로 정렬됩니다. 기본적으로 오름차순으로 정렬을 해주기 때문에, 내림차순으로 정렬하려면 ::-1 슬라이싱으로 값을 뒤집으면 됩니다.
다차원 ndarray에서 각 axis 축마다 정렬을 할 수 있습니다.
원본 행렬이 정렬되었을 때, 기존 원본 행렬의 원소에 대한 인덱스를 필요로 할 때 np.argsort() 메서드를 사용하면 됩니다. ndarray 객체를 반환하기 때문에, 원본 행렬에 팬시 인덱싱을 적용하여 정렬된 행렬을 얻을 수 있습니다. 넘파이의 ndarray는 칼럼을 메타 데이터로 가질 수 없습니다. 예를들어, 학생별 시험 성적을 데이터로 표현하기 위해서는 학생 이름과 각 학생의 성적을 각각 ndarray로 가지고 있어야 합니다. 그러므로 성적에 따라 학생의 이름을 정렬하고 싶다면 np.argsort() 메서드가 필요합니다.
Numpy는 매우 다양한 선형대수 연산을 지원합니다. 가장 기본 연산인 행렬 내적(곱)과 전치 행렬을 구하는 방법은 위와 같습니다.
'파이썬 머신러닝 완벽 가이드' 카테고리의 다른 글
파이썬 머신러닝 완벽 가이드 : 사이킷런 기반 프레임워크 익히기 (0) | 2023.04.28 |
---|---|
파이썬 머신러닝 완벽 가이드 : 사이킷런 - 붓꽃 품종 예측하기 (0) | 2023.04.28 |
파이썬 머신러닝 완벽 가이드 : Pandas (3) (0) | 2023.04.28 |
파이썬 머신러닝 완벽 가이드 : Pandas (2) (0) | 2023.04.06 |
파이썬 머신러닝 완벽 가이드 : Pandas (1) (0) | 2023.04.05 |