데이터 분석, 머신러닝, 딥러닝 등에서 데이터를 전처리 하거나 그 데이터를 활용하려고 할 때
항상 사용되는 Numpy 입니다. 생각보다 정말 많이 쓰이고, 편리한 기능도 많은데 많이 사용하지
않다보니 계속 잊어버리는 것 같습니다. 그래서 이번 기회에 직접 기록해보면서 익혀보려고 합니다.
Numpy
개인적으로 항상 헷갈리는 것이 행과 열입니다. Numpy에서 주로 axis라는 단어를 사용해 행과 열을 구분하기도 합니다.
우리가 주로 많이 사용하는 배열은 2차원 배열을 많이 사용하기 때문에 2차원으로 예시를 들어보면 세로는 axis 0,
가로는 axis 1이라고 표현합니다.
간단하게 용어에 대해서 설명하자면,
axis : 다차원 배열에서의 각 차원을 의미합니다. 특히, 2차원 배열에서는 세로가 axis 0, 가로가 axis 1을 의미합니다. 그래서 우리는 읽을 때도, 2x3 배열이라고 읽습니다.
rank : 배열의 차원의 수를 의미합니다. 즉, axis의 갯수를 의미합니다. 2차원 배열은 축이 2개, 3차원은 축이 3개 라고 말합니다.
shape : 배열의 각 차원별 크기를 나타내는 튜플입니다. 쉽게 말해서 표현할 때는 3차원 배열의 경우 (axis0, axis1, axis2) 이런식으로 나옵니다. 다른 차원도 마찬가지로 axis0부터 순서대로 출력되는 것을 확인할 수 있습니다.
a = numpy([[1,2,3], [4,5,6]])
total_sum = np.sum(a)
sum_axis0 = np.sum(a, axis=0)
sum_axis1 = np.sum(a, axis=1)
Reshape : 배열의 shape을 변경하는 데 사용됩니다. 이 함수는 원본 배열의 데이터를 유지하면서 새로운 형태의 배열을 반환합니다. 가장 중요한 개념은 배열의 전체 요소 개수가 변경된 형태의 총 요소 개수와 일치해야 합니다. 간단하게 예를 들어 설명하자면 (12, )의 1차원 배열이 있습니다. 이 배열을 reshape 하고 싶다고 가정하면, 총 개수가 12만 되면 됩니다. 쉽게 생각해서 약수(?)가 된다고 생각하면 이해하기 쉽습니다. 12의 약수로는 (1, 12), (2, 6), (3, 4) 등이 있습니다. 이러한 배열로 나올 수 있습니다. 만약 (m, -1) or (-1, n)으로 표현한다면 해당 차원의 크기를 자동으로 계산하여 전체 요소 개수가 일치하도록 합니다. 만약 m,n 값이 총 요소의 갯수로 나누어지지 않는다면 오류가 발생할 수 있습니다.
Numpy에서 배열을 인덱싱 하는 법
특히 2차원 이상의 배열의 요소를 가져오기 위해서는 복잡할 수도 있습니다. 위에 언급한 대로, 항상 행과 열이라는 단어가 저한테는 매우 어렵게 다가왔기 때문에 이참에 쉽게 앞에 있는 것을 세로 축, 뒤에 있는 것을 가로축이라고 외우기로 했습니다.
배열[:, [1,2]] : 두번째, 세번째 열을 조회합니다. : 의 의미는 처음부터 끝까지를 의미합니다.
해당 배열은 3x3의 배열로 이루어져 있습니다. 그렇기 때문에, 행 부분은 모두를 가져오는 것이고, 열 부분은 두번째, 세번째 인덱스를 가져오는 모습을 확인할 수 있었습니다.
배열[[1,2], : ] : 두번째, 세번째 행의 모든 열을 뽑아낸다는 것을 의미합니다.
Numpy에서 배열을 슬라이싱 하는법
배열[행1:행N, 열1:열N] 형태로 지정해 그 위치의 요소를 조회합니다.
여기서 주의해야 할 점이 있습니다.
마지막 범위 값은 대상의 값은 포함되지 않습니다.
Numpy에서 배열 조건 조회 하는법
Numpy 에서는 배열 안에 인덱스를 조회할 때 조건에 맞는 요소를 선택할 수 있습니다. 쉽게 말해서 Boolean 방식이라고 불립니다.
조건을 True or False라고 나올 때, 거기서 True인 값들만 가져오도록 합니다.
추가로 여러 조건을 &(AND)와 |(OR)로 연결하여 조회할 수 있습니다.
딥러닝이나 머신러닝 또는 데이터 처리를 할때 항상 사용되는 numpy! 여태까지는 필요할 때 계속 검색해서 사용했었는데, 이런 간단한 내용의 경우에는 직접 외워서 사용하면 좋을 것 같습니다!
내용이 틀린 부분이 있거나 수정해야할 부분 등 피드백의 경우에는 댓글 남겨주세요!
'개발 > 에이블스쿨' 카테고리의 다른 글
[웹 크롤링] 네이버 증권, 다음 증권도 크롤링 해보자! (2) | 2024.03.07 |
---|---|
[AIVLE-SCHOOL] 1일차, IT 프로젝트 관리도구[GIT] 사용법에 대해서 알아보다 [Feat. 생활코딩-이고잉 선생님] (2) | 2024.02.22 |