본문 바로가기
Python

[Python] python 라이브러리 - numpy 총 정리

by 잼들리 2022. 11. 26.

python에는 아주 다양한 라이브러리가 있는데요!

그 중 가장 기초적인 numpy 라이브러리를 소개하겠습니다 :)


  • List : 값의 집합 → 대량의 데이터를 다루기 어렵습니다.
  • Numpy : Numerical Python의 줄임말
    • 벡터와 행렬 연산이 용이함
    • Array(행렬)라는 단위로 데이터 관리 및 연산 수행

▶ numpy 라이브러리 불러오기

import numpy as np

🔶 Numpy Array

  • 용어 정리
    • Axis : 배열이 각 축
    • Rank : 축의 개수(차원) (= ndim)
    • Shape : 축의 길이
    • axis 0 : 열(세로) / axis 1 : 행(가로)
    • ex) (3 x 4) 형태의 배열
      • Shape = (3, 4)
      • Rank 2 Array

1차원 배열 만들기

a = np.array([1, 2, 3, 4, 5])

print(a) # [1, 2, 3, 4, 5]
print(type(a)) # <class 'numpy.ndarray'>
print(a.ndim) # 1 -> (차원)
print(a.shape) # (5,) -> (모양)
print(a.dtype) # int32 -> (데이터 형식)
print(a[0], a[1], a[2]) # 1 2 3

2차원 배열 만들기

a2 = np.array([[1.5, 2.5, 3.2], [4.2, 5.7, 6.4]])

print(a2) # [[1.5, 2.5, 3.2], [4.2, 5.7, 6.4]]
print(a2.ndim) # 2 -> (차원)
print(a2.shape) # (2, 3) -> (모양)
print(a2.dtype) # float64 -> (데이터 형식)

3차원 배열 만들기

a3 = np.array([[[1, 3, 1], [4, 7, 6], [8, 3, 4]], [[6, 2, 4], [8, 1, 5], [3, 5, 9]]])
print(a3)
print(a3.ndim) # 3
print(a3.shape) # (2, 3, 3)
print(a3.dtype) # int32

🔶 Reshape

: 기존 배열을 새로운 형태(Shape)의 배열로 다시 재구성  ex) 3 x 4 → 2 x 6 → 4 X 3 → 12 x 1 → 6 x 2

a= np.array([1, 2, 3], [4, 5, 6])

# (3 x 2) 배열로 변환
b = np.reshape(a, (3, 2)) 
# [[1 2]
#  [3 4]
#  [5 6]]

# (6 x 1) 배열로 변환
c = a.reshape(6)
# [1 2 3 4 5 6]

# (3 x 2) 배열로 변환 -> -1 : 자동으로 맞춰서 변환해줌
d = a.reshape(3, -1)
# [[1 2]
#  [3 4]
#  [5 6]]
a = [1, 2, 3, 4]

# a가 numpy array가 아닌 list여도 실행가능
b = np.reshape(a, (2,2))

# a가 numpy array가 아니면 실행 불가능
a = np.array(a)
c = a.reshape(2,2)

배열을 만드는 여러 함수들

  • zeros() : 0으로 배열 채우기
# 0으로 채워진 배열
a = np.zeros((2,2))
print(a)

# [[0. 0.]
#  [0. 0.]]

 

  • ones() : 1로 배열 채우기
# 1로 채워진 배열
b = np.ones((1,2))
print(b)

# [[1. 1.]]

 

  • full() : 특정 값으로 배열 채우기
# 특정 값으로 채워진 배열
c= np.full((2,2), 7.)
print(c)

# [[7. 7.]
#  [7. 7.]]

 

  • eye() : 단위행렬(identity matrix) 만들기
# 2x2 단위 행렬(indentity matrix)
d= np.eye(2)
print(d)

# [[1. 0.]
#  [0. 1.]]

 

  • random() : 랜덤값으로 배열 채우기
# 랜덤값으로 채운 배열
e = np.random.random((2,2))
print(e)

# [[0.12018151 0.04275125]
#  [0.49404771 0.71505311]]

▶ 함수와 메서드

  • mean() : numpy 배열 평균 구하기
# 선언
a = [1, 2, 3]
b = (1, 2, 3)
c = np.array([1, 2, 3])

# 평균 구하기 : 함수
print(np.mean(a)) # 2.0
print(np.mean(b)) # 2.0
print(np.mean(c)) # 2.0

# 평균 구하기 : 메서드 방식
# print(a.mean()) -> 오류 발생
# print(b.mean()) -> 오류 발생
print(c.mean()) # 2.0

🔶 인덱싱

1차원 배열

Score = np.array([78, 91, 84, 89, 93, 65])
Score[Score >= 90] # array([91, 93])

2차원 배열

Score_2d = np.array([78, 91, 84, 89, 93, 65],
										[82, 87, 96, 79, 91, 73))
Score_2d[0][Score_2d[0] >= 90] # array([91, 93])
Score_2d[1][Score_2d[1] >= 90] # array([96, 91])

정수방식 배열 인덱싱

# (3, 3) 형태의 2차원 배열 만들기
a = np.array([[1, 2, 3],
              [4, 5, 6], 
              [7, 8, 9]])

 

  • 요소 조회
# 첫 번째 행, 두 번째 열 요소 조회
print(a[0, 1])

 

  • 행 조회
# 첫 번째, 두 번째 행 조회
print(a[[0, 1], :])
print(a[[0, 1]])
# 첫 번째, 두 번째, 세 번째 행 조회
print(a[[0, 1, 2], :])
print(a[[0, 1, 2]])

 

  • 열 조회
# 첫 번째, 두 번째 열 조회
print(a[:, [0, 1]]) # 행 조건 :은 생략X

 

  • 행, 열 조회
# 두 번째 행 두 번째 열의 요소 조회
print(a[[1], [1]])

# 세 번째 행 두 번째 열의 요소 조회
print(a[[2], [1]])

# 첫 번째 행 첫 번째 열, 두 번째 행 두 번째 열의 요소 조회
print(a[[0, 1], [0, 1]])
# => (0,0), (1,1)

# 첫 전째 행 첫 번째 열, 두 번째 행 두 번째 열, 세 번째 행 첫 번째 열의 요소 조회
print(a[[0, 1, 2], [0, 1, 0]])
# => (0,0), (1,1), (2,0)

슬라이싱 ex) a[0:2] 

# (3, 3) 형태의 2차원 배열 만들기
a = np.array([[1, 2, 3],
              [4, 5, 6], 
              [7, 8, 9]])
# 첫 번째 ~ 두 번째 행 조회
# print(a[0:2, :])
print(a[0:2])
# [[1 2 3]
#  [4 5 6]]

# 첫 번째 행, 첫 번째 ~ 두 번째 열 조회
print(a[0, 0:2])
# [1 2]

# 첫 번째 ~ 세 번째 행, 두 번째 ~ 세 번째 열 조회
print(a[0:3, 1:3])
# [[2 3]
#  [5 6]
#  [8 9]]

🔶 배열 연산

  • 더하기 : + 또는 np.add
  • 빼기 : - 또는 np.subtract
  • 곱하기 : * 또는 np.multiply
  • 나누기 : / 또는 np.divide
  • 제곱 : ** 또는 np.power
  • 제곱근 : np.sqrt

🔶 배열 집계 함수

  • 합계 : np.sum()
  • 평균 : np.mean()
  • 표준편차 : np.std()
# 전체 집계
print(np.sum(a))

# 열기준 집계
print(np.sum(a, axis = 0)) # 세로

# 행기준 집계
print(np.sum(a, axis = 1)) # 가로

[추가] np.argmax(a) → 전체에서 최댓값의 인덱스

# 전체 중에서 가장 큰 값의 인덱스
print(np.argmax(a))

# 행 방향 최대값의 인덱스
print(np.argmax(a, axis = 0))

# 열 방향 최대값의 인덱스
print(np.argmax(a, axis = 1))

🔶조건문

np.where (조건문, 참일 때 값, 거짓일 때 값)

# where : 조건문
print(np.where(a>2, 1, 0))

# 참 일때는 1, 거짓일 때는 값 그대로
print(np.where(a>2, 1, a))

np.linspace (시작값, 끝값, 사이 값 개수)

# range(1, 10, 2)
list(range(1, 10, 2))
# [1, 3, 5, 7, 9]

# 0.1 ~ 10 사이의 100개 값을 만들어 봅시다.
np.linspace(0.1, 10, 100)

댓글