[데이터분석] Numpy 배열

2024. 8. 13. 15:28데이터 사이언스

Numpy 배열

  • 같은 배열 속 값들은 모두 동일한 자료형 이어야함
  • 3차원 배열: 2D 배열의 개수를 파악하고, 2D 배열의 형태 파악
    • 2D배열의 개수가 4개
    • 2D배열의 형태 : shape(2, 3)
  • 1차원 배열: shape(3, )
  • 2차원 배열: shape(2, 3) : 2행 3열
  • 3차원 배열: shape(4, 3, 2) : 4행 3열이 2개

배열 속성 확인

ndarray.dtype # 데이터의 자료형 확인 (ex) float64
ndarray.ndim # 데이터 차원 확인 (ex) 3
ndarray.shape # 데이터의 축(axis)별 크기 확인 (ex) (2, 4, 3)
ndarray.size # 데이터의 전체 요소 개수 확인 (ex) 24

배열 생성

  • 유형1
```python
np.array(list or tuple) # Python의 list나 tuple을 numpy 배열로 만듦

# (ex)
np.array([1, 2, 3, 4, 5])
array([1, 2, 3, 4, 5])
```
  • 유형2 : 모두 같은 원소
# 모두 같은 원소
np.zeros(shape) # 모든 원소가 0인 배열 생성
np.ones(shape) # 모든 원소가 1인 배열 생성
np.full(shape, n) # 모든 원소가 n인 배열 생성

# (ex)
np.zeros((2, 3))
array([0., 0., 0.], [0., 0., 0.]])

np.ones((2, 3))
array([[1., 1., 1.], [1., 1., 1.]])

np.full((2, 3), 5)
array([5, 5, 5], [5, 5, 5]])
  • 유형3 : 연속적인 원소
# 연속적인 원소
np.arange(start, stop, step) # start 이상 stop 미만 간격이 step인 배열 생성
np.linspace(start, stop, n등분) # start 이상 stop 이하 n등분하여 배열 생성

# (ex)
np.arrange(1, 9, 2) # 1이상 9미만 간격이 2인 배열 생성
array([1, 3, 5, 7])

np.linspace(1, 9, 5) # 1이상 9이상 5등분하여 배열 생성
array([1., 3., 5., 7., 9.])
  • 유형4 : 랜덤 - 주어진 배열 존재
# 랜덤 # 주어진 배열 존재
np.random.choice(data,shape) # 주어진 배열에서 임의로 원소 선택하여 배열 생성
np.random.shuffle(data) # 주어진 배열의 순서 임의로 변경

# (ex)
data = np.array([1, 2, 3, 4, 5])

np.random.choice(data, (2, 3)) # 주어진 배열에서 임의의 원소를 선택하여 2행 3열 배열 생성
array([5, 5, 2], [2, 4, 2]])

np.random.shuffle(data) # 주어진 배열의 순서 임의로 변경
array([5, 1, 4, 3, 2])
  • 유형5 : 랜덤 - 주어진 배열 존재X
# 랜덤 # 주어진 배열 존재 X
np.random.rand(shape) # [0, 1)에서 각 구간의 난수 수가 균등분포 따르도록 샘플링
np.random.randn(shape) # 난수가 표준정규분포를 따르도록 샘플링
np.random.randint(start, stop, shape) # start 이상 stop 미만인 정수 샘플링


# (ex)
np.random.randins(1, 10, (2, 3))
array([[9, 1, 7], [2, 7, 2]])

배열 형태 변환

  • reshape(shape): 지정한 shape으로 형태 변환
  • T: 전치(Transpose) 변환
np.arrange(0, 6)
array([0, 1, 2, 3, 4, 5])

# 연속적인 원소
# np.arange(start, stop, step) # start 이상 stop 미만 간격이 step인 배열 생성

np.arrange(6).reshape(3, 2)
array([0, 1], [2, 3], [4, 5]])

np.arrange(6).reshape(3, 2).T
array([[0, 2, 4], [1, 3, 5]])

배열 연산

  • 리스트 연산과의 차이
# 리스트 연산
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
print(list1 + list2)
# [1, 2, 3, 4, 5, 6, 7, 8]

#Numpy 연산
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])
print(arr1 + arr2)
# [6, 8, 10, 12] >> 같은 위치의 요소끼리 연산
  • Numpy는 기본적으로 같은 위치에 있는 원소끼리 연산을 수행
    • array1 + array2 : 같은 위치에 있는 원소끼리 덧셈 수행
    • array1 - array2 : 같은 위치에 있는 원소끼리 뺄셈 수행
    • array1 * array2 : 같은 위치에 있는 원소끼리 곱셈 수행
    • array1 / array2 : 같은 위치에 있는 원소끼리 나눗셈 수행
  • 행렬의 곱을 구하고 싶은 경우
    • [조건] 앞 행렬의 열 개수 = 뒤 행렬의 행 개수
    • array @ array2
  • Numpy 집계 함수
np.sum(array) # 전체 원소의 합을 계산
np.mean(array) # 전체 원소의 평균을 계산
np.std(array), np.var(array) # 전체 원소의 표준편차, 분산을 계산
np.min(array), np.max(array) # 전체 원소의 최솟값, 최댓값 반환
np.argmin(array), np.argmax(array) # 전체 원소의 최솟값, 최댓값이 위치한 인덱스 반환