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)'Python' 카테고리의 다른 글
| [Python] python 자료구조 - 문제 풀면서 배우기 (0) | 2022.11.26 |
|---|---|
| [Python] python 기초 - 문제 풀면서 배우기 (0) | 2022.11.26 |
댓글