WeniVooks

검색

essentials-numpy-pandas

NumPy 배열 활용

1. 인덱싱과 슬라이싱

1.1 기본 인덱싱과 슬라이싱

인덱싱은 파이썬의 인덱싱과 유사합니다. arr[index]와 같은 형태입니다.

import numpy as np arr = np.array([1, 2, 3, 4, 5]) arr[2]

다만, 완전히 동일한 방식은 아닙니다. 다차원 배열의 경우, 각 차원에 대한 인덱스를 콤마로 구분하여 지정할 수 있습니다. arr[row, column]과 같은 형태로 사용합니다.

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) arr[1, 2]
1.2 슬라이싱

슬라이싱도 파이썬과 유사하게 arr[start:end:step] 형태로 사용합니다.

import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr[1:4]) # 기본 슬라이싱 print(arr[:3]) # 처음부터 3번째 요소까지 print(arr[2:]) # 3번째 요소부터 끝까지 print(arr[::2]) # 2칸씩 건너뛰며 선택

다차원 배열의 경우, 각 차원에 대해 슬라이싱을 지정할 수 있습니다. arr[row_start:row_end, column_start:column_end] 형태로 사용합니다.

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) arr[0:2, 1:3]
1.3 불리언 인덱싱

불리언 인덱싱은 조건에 맞는 요소만 선택하는 방법입니다. arr[condition] 형태로 사용합니다. 여기서 condition은 True/False 값을 가지는 배열이며, arr와 condition의 크기는 동일해야 합니다.

import numpy as np arr = np.array([1, 2, 3, 4, 5]) arr[arr > 2]

직접 불리언 값을 사용할 수도 있습니다.

import numpy as np arr = np.array([1, 2, 3, 4, 5]) mask = np.array([False, True, True, False, True]) arr[mask]

이번에는 복합 조건을 사용해보겠습니다. 조건은 and로 둘 다 만족하는 경우를 사용해보겠습니다. 다만 불리언 인덱싱에서 and 연산자를 사용하지 않고 & 연산자를 사용해야 합니다.

import numpy as np arr = np.array([1, 2, 3, 4, 5]) mask = (arr > 2) & (arr < 5) arr[mask] # 복합 조건
1.4 팬시 인덱싱

팬시 인덱싱은 정수 배열을 사용하여 여러 인덱스의 요소를 동시에 선택하는 방법입니다. arr[[index1, index2, ...]] 형태로 사용합니다.

import numpy as np arr = np.array([1, 2, 3, 4, 5]) arr[[1, 3, 4]]

2. 배열 연결

2.1 concatnate 함수
피그잼
np.concatenate

배열 연결은 두 개 이상의 배열을 하나로 합치는 과정입니다. np.concatenate() 함수는 튜플이나 배열의 리스트를 받아 지정된 축을 따라 배열들을 연결합니다. concatenate는 배열들을 끝과 끝을 이어 붙이는 것과 같습니다.

import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) np.concatenate((a, b))
2.2 vstack 함수
피그잼
np.vstack

np.vstack() 함수는 수직(vertical)으로 배열들을 쌓아 연결합니다. 이는 2D 배열에서 행을 추가하는 것과 같습니다. vstack은 배열들을 수직으로 쌓는 것과 같습니다.

import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) np.vstack((a, b))
2.3 hstack 함수
피그잼
np.vstack

np.hstack() 함수는 수평(horizontal)으로 배열들을 옆으로 연결합니다. 이는 2D 배열에서 열을 추가하는 것과 같습니다. hstack은 배열들을 수평으로 연결하는 것과 같습니다.

import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) np.hstack((a, b))

3. 배열 분할

3.1 split 함수
피그잼
np.split

np.split() 함수는 배열을 여러 개의 하위 배열로 균등하게 나눕니다. 분할 지점이나 분할할 배열의 수를 지정할 수 있습니다. np.split(arr, 3)은 3개의 하위 배열로 나누는 것을 의미합니다. 주의해야 할 점은 균등하게 나눌 수 없는 경우 ValueError가 발생합니다.

import numpy as np arr = np.array([1, 2, 3, 4, 5, 6]) np.split(arr, 3)
3.2 array split 함수
피그잼
np.array_split

np.array_split() 함수는 split 함수와 유사하지만, 균등하게 나눌 수 없는 경우에도 사용할 수 있습니다. 이 경우 일부 하위 배열은 다른 배열보다 하나 더 적은 요소를 가질 수 있습니다.

import numpy as np arr = np.array([1, 2, 3, 4, 5, 6]) np.array_split(arr, 4)
3.3 hsplit 함수
피그잼
np.hsplit

np.hsplit() 함수는 배열을 수평(horizontal)으로 분할합니다.

import numpy as np arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) np.hsplit(arr, 2)
3.4 vsplit 함수
피그잼
np.vsplit

np.vsplit() 함수는 배열을 수직(vertical)으로 분할합니다.

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) np.vsplit(arr, 2)
{"packages":["numpy","pandas","matplotlib","lxml"]}
2.2 ndarray 생성, 변경, 연산2.4 NumPy 다양한 함수