Python
Numpy 기본
- -
728x90
학교 수업시간에 numpy를 배웠다. 사실 이미 공모전이나 프로젝트 등 다양한 곳에서 판다스나 넘파이를 적용해 왔는데 그때그때 필요한 것을 공부해서 적용했었을 뿐 제대로 누군가에게 배우는 것은 처음이다. 따라서 배운 내용을 간단하게나마 요약해 보고자 한다.
1. 넘파이 배열 객체 다루기
넘파이 배열의 특징
- 배열의 모든 구성요소에 값이 존재해야 함
- 동적 타이핑 지원 x 하나의 데이터 타입만 사용
- 각 값의 메모리 크기가 동일
# 패키기 불러오기
import numpy as np
import sys
test_array = np.array([1, 4, 5,8], dtype = float)
test_array
array([1., 4., 5., 8.])
2. 인덱싱과 슬라이싱
x = np.array([[1, 2, 3], [4, 5, 6]], int)
print(x[0][0]); print(x[0, 2])
'''
1
3
'''
x = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], int)
x[:, 1:3]
'''
array([[2, 3],
[7, 8]])
'''
x[1, 1:3]
'''
array([7, 8])
'''
x[1:3]
'''
array([[ 6, 7, 8, 9, 10]])
'''
x = np.array(range(15), int).reshape(3, -1); x
'''
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
'''
x[:, ::2]
'''
array([[ 0, 2, 4],
[ 5, 7, 9],
[10, 12, 14]])
'''
x[::2, ::3]
'''
array([[ 0, 3],
[10, 13]])
'''
3. 배열 생성함수
arange
np.arange(10
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(-5, 5)
# array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4])
np.arange(0, 5, 0.5)
# array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])
ones, zeros, empty
np.ones(shape=(5, 2), dtype=np.int8)
'''
array([[1, 1],
[1, 1],
[1, 1],
[1, 1],
[1, 1]], dtype=int8)
'''
np.zeros(shape=(5, 2), dtype=np.float32)
'''
array([[0., 0.],
[0., 0.],
[0., 0.],
[0., 0.],
[0., 0.]], dtype=float32)
'''
np.empty(shape=(5, 2), dtype=np.float64)
'''
array([[0. , 0.5],
[1. , 1.5],
[2. , 2.5],
[3. , 3.5],
[4. , 4.5]])
'''
ones_like, zeros_like, empty_like
x = np.array(range(15), int).reshape(3, -1);
np.ones_like(x)
'''
array([[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]])
'''
np.zeros_like(x)
'''
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
'''
np.empty_like(x)
'''
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
'''
identity, eye, diag(정방 단위행렬, 일반 단위행렬, 주대각선 추출)
np.identity(n=3, dtype =int)
'''
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
'''
np.eye(N=3, M=5)
'''
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.]])
'''
np.eye(N=3, M=5, k=2)
'''
array([[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
'''
x=np.arange(9).reshape(3, 3); x
'''
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
'''
np.diag(x)
'''
array([0, 4, 8])
'''
np.diag(x, k=1)
'''
array([1, 5])
'''
4. 배열 연결 함수
v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])
np.vstack([v1, v2])
'''
array([[1, 2, 3],
[4, 5, 6]])
'''
np.hstack([v1, v2])
'''
array([1, 2, 3, 4, 5, 6])
'''
아래의 concatenate 함수는 스택 계열의 함수와 달리 함수가 생성될 배열과 소스가 되는 배열의 차원과 같아야 함.
즉, 두 v1, v2 벡터를 결합하고 싶다면 일단 2차원으로 변경이 필요함. 반환값이 2차원이기 때문
np.concatenate([v1, v2], axis=0)
'''
array([[1, 2, 3],
[4, 5, 6]])
'''
np.concatenate([v1, v2], axis=1)
'''
array([[1, 2, 3, 4, 5, 6]])
'''
+ 추가 벡터의 내적 연산함수 'dot'
# dot 함수: 백터의 내적 연산
x_1 = np.arange(1, 7).reshape(2, 3)
x_2 = np.arange(1, 7).reshape(3, 2)
print(x_1);print(x_2); x_1.dot(x_2)
'''
[[1 2 3]
[4 5 6]]
[[1 2]
[3 4]
[5 6]]
array([[22, 28],
[49, 64]])
'''
5. 비교 연산과 데이터 추출
x = np.array([4, 3, 2, 6, 8, 5])
x >3
'''
array([ True, False, False, True, True, True])
'''
x = np.array([1, 3, 0])
y = np.array([2, 1, 7])
x>y
'''
array([False, True, False])
'''
비교 연산 함수
all과 any
all함수: 배열 내부의 모든 값이 참일 경우 True, 하나라도 참이 아닐 경우에는 False 반환
any함수: 배열 내부의 값 중 하나라도 참일 때는 True, 모두 거짓일 경우 False 반환
x = np.array([4, 3, 2, 6, 8, 5])
(x>3).all() # False
(x>3).any() # True
인덱스 반환함수
x = np.array([4, 6, 7, 3, 2])
np.where(x>5, 10, 20)
'''
array([20, 10, 10, 20, 20])
'''
np.argsort(x)
'''
np.argsort(x)
'''
np.argmin(x) # 4
np.argmax(x) # 2
인덱스를 활용한 데이터 추출
# 불린 인덱스
cond = x>3
x[cond]
'''
array([4, 6, 7])
'''
# 펜시 인덱스(정수형 배열을 사용하여 해당 정수의 인덱스에 위치한 값을 반환)
x = np.array([4, 6, 7, 3, 2])
cond = np.array([1, 2, 0, 2, 2, 2,], int)
x[cond]
'''
array([6, 7, 4, 7, 7, 7])
'''
x = np.array([[1, 4], [9, 16]], int)
a = np.array([0, 1, 1, 1, 0, 0], int)
b = np.array([0, 0, 0, 1, 1, 1], int)
x[a, b]
'''
array([ 1, 9, 9, 16, 4, 4])
'''
728x90
'Python' 카테고리의 다른 글
자료구조 #1 Array (0) | 2023.12.21 |
---|---|
자료구조 #2 Queue (0) | 2023.12.21 |
넘파이 ndarray의 axis축(axis≠행열) (0) | 2022.07.27 |
numpy 개요(ndarray와 배열의 타입) (0) | 2022.07.27 |
Contents
소중한 공감 감사합니다