3일차) 넘파이 (3)

BinBin·2022년 1월 3일
1

머신러닝 공부

목록 보기
5/10
post-thumbnail

오늘은 파이썬과 넘파이에 있어서 중요한 테크닉 중 하나인 인덱싱에 대해서 배워보겠습니다.

1차원 Indexing

먼저 임의의 ndarray를 생성해보겠습니다.

import numpy as np

array = np.arange(9)

print(array)
output

[0, 1, 2, 3, 4, 5, 6, 7, 8]

저번에 알려드렸던 arange를 이용해서 0에서 8까지로 구성된 ndarray를 생성했습니다.

이제 여기에서 원하는 값을 인덱싱을 하려면 파이썬 인덱싱과 마찬가지로 '[ ]'을 이용해서 원하는 위치를 지정해주면 됩니다. 이때 이전 포스팅에서 파이썬은 0부터 숫자를 세어 나간다고 했는데 인덱싱도 마찬가지로 첫번째 데이터에는 0이라는 인덱스 번호가 부여됩니다.

따라서 위의 array에서 0을 추출하고 싶으면 array([1])이 아닌 array([0])을 해주어야 합니다.

단, 뒤에서부터 세린다면 -1부터 시작하게 됩니다.


출처)https://dschloe.github.io/python/basic/basic_syntax_list_1/

이상 위의 내용은 1차원 ndarray를 인덱싱하는 방법이었고 이번에는 여러 차원의 ndarray에서 한 데이터를 추출하는 방법을 알아보겠습니다.

다차원 Indexing

먼저 설명을 쉽게 하기 위해 2 X 2짜리 ndarray를 하나 생성해보겠습니다.

array1 = np.arange(start=1, stop=5)
array2 = array1.reshape(2, 2)

print(array2)
output

[[1, 2],
 [3, 4]]

짤막한 TIP! ❗❗
arange에는 파라미터가 있는데 위의 예시처럼 시작과 끝의 범위를 지정해줄 수도 있습니다. 이때 숫자의 범위는 start 값 이상 stop 값 미만인 점을 주의하시기 바랍니다.

위 코드로 2 X 2 ndarray를 생성했습니다.

2차원은 1차원과 달리 행과 열이라는게 구분이 되어 있습니다. 이때 인덱싱을 어떻게 하나면 죄표평면에서 특정한 좌표를 찾는 것 처럼 (x, y) 이런 식으로 인덱싱을 해주면 원하는 데이터를 콕 집을 수 있습니다.

단 넘파이에서는 평소 저희가 x축 y축 순으로 좌표를 지정하는 것이 아니라 반대로 지정을 해야 합니다.

print(array2[1, 0])

평상시 알고 있었던 좌표 지정방식과 파이썬은 0부터 인덱싱을 시작한다는 것을 감안한다면 이 코드를 실행하면 2가 나올 것 같죠?

하지만 반환되는 값은 3입니다.

왜 이런 일이 발생하는지 구글링을 통해 알아보면 'axis'라는 단어를 분명히 보셨을 겁니다.
axis라는 단어의 사전적 의미는 축 또는 축선이라는 뜻을 내포하고 있습니다.

그런데 이게 넘파이에서 무슨 의미를 가지고 있을까요?

다시 이에 대해 구글링을 해보시면 됩니다. 저는 'axis meaning in python'이라는 키워드로 검색을 해서 가장 위에 있는 사이트에 들어갔습니다.

검색링크

마침 들어간 사이트가 SciPy 공식 문서였습니다. 이건 넘파이의 ndarray를 기반으로 구동되는 라이브러리인데 나중에 요긴하게 쓰입니다.

여기서는 axis에 대해 이렇게 정의하고 있습니다.

Axes are defined for arrays with more than one dimension. A 2-dimensional array has two corresponding axes: the first running vertically downwards across rows (axis 0), and the second running horizontally across columns (axis 1).

해석해보면 2차원 이상의 array에서 정의가 되고 당연히 2차원인 경우에는 2개의 축이 있는데 첫번째 축은 row방향으로 있는 axis 0이고 두번째는 column방향으로 위치한
axis 1입니다.

이런 방식으로 차원이 하나 늘어날 때마다 axis가 하나씩 늘어나는데, 앞으로 넘파이 함수를 사용하게 된다면 axis 파라미터를 자주 보게 되므로 필히 숙지를 해야 합니다.

왜 axis 0이 row방향인지 이해가 안간다 ㄹㅇ

profile
빅데이터에 관심이 많은 대학생입니다

0개의 댓글